|
текстовый файл
|
|||
---|---|---|---|
#18+
Добрый день, Подскажите пожалуйста, не знаю как сделать лучше: У меня есть .csv файл со строками Англия Россия Москва Ростов Питер итд резделитель enter Все понятно если нужно взять прочитать целый файл, но как например загрузить в массив произвольное количество строк? например 10 или 1000 итп. (количество строк в файле много, порядка млн.) Именно произвольное количество? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 16:44 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 16:48 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
denis_stell, читать построчно и накапливать их в массиве или List<string>. Стандартных методов для чтения кусков строковых файлов нет. Arm79 Код: c# 1.
Раз у автора файл с милионом строк, то это неудачный совет. Мы сначала прочитаем все строки в память и только затем будем их фильтровать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 16:58 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
Arm79, а как можно сделать по другому? В принципи File.ReadLines() считает все строки, в IEnumerable<string>, память будет выделена под каждую строку и лишь потом будут отброшены лишние строки и пройдет сборка мусора? Как обойти лишнее выделение памяти? Код: c# 1.
даже если мы берем, Ваш пример, то из файла, пропускаем 300 строк и из этого берем 42 строки, правильно?Если так, всё равно это не произвольное количество ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:01 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
bazile, читаем msdn по ReadLines: Методы ReadLines и ReadAllLines отличаются следующим образом: при использовании ReadLines, можно начать перечисление коллекции строк до возврата всей коллекции; при использовании ReadAllLines, необходимо подождать возврата всего массива строк, прежде чем получить доступ к нему. Таким образом при работе с очень большими файлами, ReadLines может оказаться более эффективным. Если работать нужно постоянно, естественно сначала загрузить файл в память и далее работать с памятью. Для однократного чтения ReadLines лучший выбор К тому же трудно назвать этот файл очень большим: 10 символов на город, 10 миллионов записей = около 100 Мб. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:01 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
bazile, Arm79, вы точно уверены, что скип решит проблему? http://ru.wikipedia.org/wiki/CSV Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ("); если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд. Строки разделяются парой символов CR LF (0x0D 0x0A) (в DOS и Windows эта пара генерируется нажатием клавиши Enter). Однако конкретные реализации могут использовать другие общепринятые разделители строк, например LF (0x0A) в UNIX. По теме: http://codearticles.ru/articles/836 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:09 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
denis_stellпамять будет выделена под каждую строку и лишь потом будут отброшены лишние строки и пройдет сборка мусора? Нет, сборщик мусора будет работать параллельно и удалять ненужные строки. Не нужно ждать окончания загрузки всего файла в память. В этом отличие от ReadAllLines denis_stellКак обойти лишнее выделение памяти? Что значит лишнее? Вы готовы освоить отображение файлов в память ? denis_stellпропускаем 300 строк и из этого берем 42 строки, правильно?Если так, всё равно это не произвольное количество что есть произвольное количество? Если есть необходимость многократного обращения для поиска городов, то логично загрузить в локальную БД с табличкой типа table1 (int id identity(1,1) primary key, varchar(128) city) и юзать поиск поиск по ключу ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:10 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
МСУbazile, Arm79, вы точно уверены, что скип ReadLines / ReadAllLines решит проблему? Вообщем, оба варианта на свалку. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:10 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
МСУbazile, Arm79, вы точно уверены, что скип решит проблему? я ни в чем не уверен, но по сабжу - одна колонка в файле ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:12 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
народ не привязывайтесь к содержанию файла. В csv может быть сколь угодна разная инфа, от городов,фамилий до ip адресов, суть не в этом. Мне нужно, взять произвольное количество строк, если это вообще реально, то одна строка сначала, другая через 100 строк итд, может глупо звучит, именно рандомно(хотя всё это псевдо случайность) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:17 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
Arm79, всё правильно одна колонка ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:17 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
что есть произвольное количество? Если есть необходимость многократного обращения для поиска городов, то логично загрузить в локальную БД с табличкой типа table1 (int id identity(1,1) primary key, varchar(128) city) и юзать поиск поиск по ключу[/quot] загрузка в базы/справочники итд, исключено. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:27 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
denis_stellМне нужно, взять произвольное количество строк, если это вообще реально, то одна строка сначала, другая через 100 строк итд, может глупо звучит, именно рандомно(хотя всё это псевдо случайность) Ну так тебе дали ответ. Что не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:30 |
|
текстовый файл
|
|||
---|---|---|---|
#18+
denis_stellзагрузка в базы/справочники итд, исключено. смешно :-) Тогда: Отображаете в память файл Перебираете его посимвольно и ищете \r\n Все найденные позиции заносите в Dictionary, где Key - номер строки, Value - позиция Теперь все просто: нужна 347? Берете смещение для 346 строки и считываете количество символов, равное разности 347 и 346 строк. Грубо - Dictionary - это индекс на файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:39 |
|
|
start [/forum/topic.php?fid=20&gotonew=1&tid=1403783]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 329ms |
total: | 511ms |
0 / 0 |