powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / текстовый файл
16 сообщений из 16, страница 1 из 1
текстовый файл
    #38443835
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
Подскажите пожалуйста, не знаю как сделать лучше:
У меня есть .csv файл со строками
Англия
Россия
Москва
Ростов
Питер
итд
резделитель enter
Все понятно если нужно взять прочитать целый файл, но как например загрузить в массив произвольное количество строк? например 10 или 1000 итп. (количество строк в файле много, порядка млн.)
Именно произвольное количество?
...
Рейтинг: 0 / 0
текстовый файл
    #38443845
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
File.ReadLines("путь").Skip(300).Take(42)
...
Рейтинг: 0 / 0
текстовый файл
    #38443865
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stell, читать построчно и накапливать их в массиве или List<string>. Стандартных методов для чтения кусков строковых файлов нет.

Arm79
Код: c#
1.
File.ReadLines("путь").Skip(300).Take(42)


Раз у автора файл с милионом строк, то это неудачный совет. Мы сначала прочитаем все строки в память и только затем будем их фильтровать.
...
Рейтинг: 0 / 0
текстовый файл
    #38443872
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

а как можно сделать по другому?

В принципи File.ReadLines() считает все строки, в IEnumerable<string>, память будет выделена под каждую строку и лишь потом будут отброшены лишние строки и пройдет сборка мусора?
Как обойти лишнее выделение памяти?
Код: c#
1.
File.ReadLines("путь").Skip(300).Take(42)

даже если мы берем, Ваш пример, то из файла, пропускаем 300 строк и из этого берем 42 строки, правильно?Если так, всё равно это не произвольное количество
...
Рейтинг: 0 / 0
текстовый файл
    #38443873
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

читаем msdn по ReadLines:
Методы ReadLines и ReadAllLines отличаются следующим образом: при использовании ReadLines, можно начать перечисление коллекции строк до возврата всей коллекции; при использовании ReadAllLines, необходимо подождать возврата всего массива строк, прежде чем получить доступ к нему. Таким образом при работе с очень большими файлами, ReadLines может оказаться более эффективным.

Если работать нужно постоянно, естественно сначала загрузить файл в память и далее работать с памятью. Для однократного чтения ReadLines лучший выбор

К тому же трудно назвать этот файл очень большим: 10 символов на город, 10 миллионов записей = около 100 Мб.
...
Рейтинг: 0 / 0
текстовый файл
    #38443885
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile, Arm79, вы точно уверены, что скип решит проблему?

http://ru.wikipedia.org/wiki/CSV Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ("); если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд. Строки разделяются парой символов CR LF (0x0D 0x0A) (в DOS и Windows эта пара генерируется нажатием клавиши Enter). Однако конкретные реализации могут использовать другие общепринятые разделители строк, например LF (0x0A) в UNIX.


По теме: http://codearticles.ru/articles/836
...
Рейтинг: 0 / 0
текстовый файл
    #38443887
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellпамять будет выделена под каждую строку и лишь потом будут отброшены лишние строки и пройдет сборка мусора?

Нет, сборщик мусора будет работать параллельно и удалять ненужные строки. Не нужно ждать окончания загрузки всего файла в память. В этом отличие от ReadAllLines

denis_stellКак обойти лишнее выделение памяти?
Что значит лишнее? Вы готовы освоить отображение файлов в память ?

denis_stellпропускаем 300 строк и из этого берем 42 строки, правильно?Если так, всё равно это не произвольное количество
что есть произвольное количество?

Если есть необходимость многократного обращения для поиска городов, то логично загрузить в локальную БД с табличкой типа table1 (int id identity(1,1) primary key, varchar(128) city) и юзать поиск поиск по ключу
...
Рейтинг: 0 / 0
текстовый файл
    #38443888
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbazile, Arm79, вы точно уверены, что скип ReadLines / ReadAllLines решит проблему?

Вообщем, оба варианта на свалку.
...
Рейтинг: 0 / 0
текстовый файл
    #38443891
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbazile, Arm79, вы точно уверены, что скип решит проблему?

я ни в чем не уверен, но по сабжу - одна колонка в файле
...
Рейтинг: 0 / 0
текстовый файл
    #38443900
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ не привязывайтесь к содержанию файла.
В csv может быть сколь угодна разная инфа, от городов,фамилий до ip адресов, суть не в этом.
Мне нужно, взять произвольное количество строк, если это вообще реально, то одна строка сначала, другая через 100 строк итд, может глупо звучит, именно рандомно(хотя всё это псевдо случайность)
...
Рейтинг: 0 / 0
текстовый файл
    #38443905
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

всё правильно одна колонка
...
Рейтинг: 0 / 0
текстовый файл
    #38443924
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что есть произвольное количество?

Если есть необходимость многократного обращения для поиска городов, то логично загрузить в локальную БД с табличкой типа table1 (int id identity(1,1) primary key, varchar(128) city) и юзать поиск поиск по ключу[/quot]

загрузка в базы/справочники итд, исключено.
...
Рейтинг: 0 / 0
текстовый файл
    #38443926
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellМне нужно, взять произвольное количество строк, если это вообще реально, то одна строка сначала, другая через 100 строк итд, может глупо звучит, именно рандомно(хотя всё это псевдо случайность)
Ну так тебе дали ответ. Что не устраивает?
...
Рейтинг: 0 / 0
текстовый файл
    #38443943
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellзагрузка в базы/справочники итд, исключено.

смешно :-)

Тогда:
Отображаете в память файл
Перебираете его посимвольно и ищете \r\n
Все найденные позиции заносите в Dictionary, где Key - номер строки, Value - позиция

Теперь все просто: нужна 347? Берете смещение для 346 строки и считываете количество символов, равное разности 347 и 346 строк.

Грубо - Dictionary - это индекс на файл.
...
Рейтинг: 0 / 0
текстовый файл
    #38443979
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо.
...
Рейтинг: 0 / 0
текстовый файл
    #38444017
WitC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.... ну, как вариант OleDB... и запросами...
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / текстовый файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]