Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354

Чтение больших файлов (несколько гигабайт)

24.06.2018, 06:25. Показов 3738. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени!
Нужно прочесть и пропарсить крупный файл весом в несколько гигабайт.
Подскажите как это сделать...
Заранее благодарю!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2018, 06:25
Ответы с готовыми решениями:

Многопоточное чтение больших файлов
Привет всем! Подскажите пожалуйста как реализовать многопоточное чтение файла рамером 1gb и больше без загрузки в память? Пробовал...

Чтение и обработка больших файлов
Нужно прочитать большой файл (несколько гигабайт), поделить содержимое файла на int'ы и посчитать их сумму. Как это сделать максимально...

Чтение запись файлов *.csv больших размеров
Доброго времени суток, форумчане! Нужно сделать: • прочитать данные таймсерий из файла (прилагается test.csv) • подсчитаете...

51
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
24.06.2018, 12:07
Студворк — интернет-сервис помощи студентам
Есть еще вариант со StringBuilder, но из всех наверно unsafe будет самым быстрым...
C#
1
2
3
4
5
6
7
8
9
10
11
12
static string Filterout(string input)
{
    StringBuilder sb = new StringBuilder(input);
 
    for(int i = 0; i < sb.Length; i++)
    {
        if (sb[i] < ' ')
            sb[i] = '.';
    }
 
    return sb.ToString();
}
1
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 12:11  [ТС]
unsafe просит компилировать с параметром компилятора /unsafe
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
24.06.2018, 12:12
Pin1999, да, это тонкий намёк на то, что использовать unsafe лучше только в экстренных ситуациях.
0
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 12:16  [ТС]
Usaga, Тогда буду использовать второй ваш вариант )

Подскажите еще вот с чем:
Чем отличаются данные способы объединения массивов?

Сами массивы...
C#
1
2
byte[] outStream = { 0x00, 0x00, 0x0F, 0xCA, 0x00, 0x0A};
byte[] inStream = { 0x10, 0x20, 0x3F, 0x4A, 0x50, 0x6A };
C#
1
byte[] base_byte = outStream.Union(inStream).ToArray();
C#
1
byte[] base_byte = outStream.Concat(inStream).ToArray();
C#
1
2
3
byte[] newArray = new byte[inStream.Length + outStream.Length];
Array.Copy(outStream, 0, newArray, 0, outStream.Length);
Array.Copy(inStream, 0, newArray, outStream.Length, inStream.Length);
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.06.2018, 12:19
Цитата Сообщение от Pin1999 Посмотреть сообщение
Как минимум в том что перебирать каждый символ вручную.
Не символ, а байт.
А что в этом страшного? Или вы думаете, что в каком-нибудь Replace символы каким-то магическим способом заменяются, не перебором?

Цитата Сообщение от Someone007 Посмотреть сообщение
из всех наверно unsafe будет самым быстрым
Если перебор ведется от 0 до .Length, то компилятор умеет это оптимизировать, убирая проверку на выход за пределы на каждой итерации.
unsafe же при определенных условиях может даже замедлить работу.
1
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 12:25  [ТС]
kolorotur, Я думаю что функция .Replase написана на более низкоуровневом языке, что делает ее быстрее )
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
24.06.2018, 12:27
Цитата Сообщение от Pin1999 Посмотреть сообщение
Чем отличаются данные способы объединения массивов?
Union объединяет два множетса, отсеивая дубликаты. Второй и третий варианты функционально эквивалентны.

Добавлено через 1 минуту
Цитата Сообщение от Pin1999 Посмотреть сообщение
Я думаю что функция .Replase написана на более низкоуровневом языке
Так и есть, но логика у неё такая же: проход по массиву символов.
1
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 12:52  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
но логика у неё такая же
Ну это и так ясно )

Добавлено через 23 минуты
Usaga, Еще один вопрос...
Не помню как его решал раньше (исходники погибли вместе с жестким диском, долбаный seagate)...

Есть массив, допустим long.
И мне нужно записать в него переменные.
Но сколько переменных может быть я знать не знаю.
Как его правильно вызвать чтоб программа не вылетала с ошибкой?

Делаю так...
C#
1
2
3
long[] arr = null;
//...
arr[id] = data;
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
24.06.2018, 12:54
Pin1999, используйте List<long>.
1
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 13:02  [ТС]
Usaga, А List<List<long>> будет работать ?)
А то иногда бывает нужно сделать массив в массиве...
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
24.06.2018, 13:48
Pin1999, всё будет работать.

Цитата Сообщение от Pin1999 Посмотреть сообщение
иногда бывает нужно сделать массив в массиве...
Вряд ли именно это нужно сделать...
0
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 14:46  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вряд ли именно это нужно сделать...
Ок.
Принимаем значения в несколько потоков.
На основе значений потом будет построен график, потому значения записываем в массив.
Колво потоков заранее не известно.
Сохранять в файл или бд нельзя.
Как выйти из ситуации?

Мне в голову приходит только массив в массиве )
Array[0] = { 21, 43, ... , 10};
Array[1] = { 89, 57, ... , 12};
...
Array[n] = { 34, 48, ... , 69};
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
24.06.2018, 15:16
Pin1999, ну ладно, в данном случае - нормальное решение, вроде бы.
0
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
25.06.2018, 07:55  [ТС]
Usaga, Если будут еще варианты - выслушаю )

Спасибо за помощь! )

Добавлено через 15 часов 33 минуты
Usaga, Подскажите с парой вопросов:
C#
1
2
List<List<int>> buffer = new List<List<int>>(N);
//N - будет относиться к колву массивов или к емкости каждого массива?
Нужно вставить в начало массива List<int> значение n, при этом остальные значения сдвинуть на 1, как это можно сделать?
C#
1
2
{ 4, 6, 2, 7, 3 }
{ n, 4, 6, 2, 7 }
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
25.06.2018, 08:14
Цитата Сообщение от Pin1999 Посмотреть сообщение
Нужно вставить в начало массива List<int> значение n, при этом остальные значения сдвинуть на 1, как это можно сделать?
Скопировать все элементы начиная с конца. В освободившуюся первую позицию вставить n.
0
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
25.06.2018, 08:22  [ТС]
Usaga, Циклом?
Или есть аналог Array.Copy(buffer, 0, buffer, 1, buffer.Count - 1); ?
Либо создать временный массив для Array.Copy?
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
25.06.2018, 08:27
Pin1999, да пройдитесь циклом. Можно и в отдельный буфер скопировать данные, а потом назад, начиная с позиции 1.
1
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
25.06.2018, 09:48  [ТС]
Usaga, А если ограничить List на допустим 5 значений и добавить 6-е через List.Add, он ведь тогда делает смещение, удаляя более старые значения замещая новыми?
Если так, то при остуствии огранечения он забивается таким же образом но ограничение уже будет пиковое.
И ничего делать не нужно, просто читать нужно не с начала а с конца.
0
Эксперт .NET
 Аватар для Usaga
14785 / 9559 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
25.06.2018, 09:55
Цитата Сообщение от Pin1999 Посмотреть сообщение
А если ограничить List на допустим 5 значений и добавить 6-е через List.Add, он ведь тогда делает смещение, удаляя более старые значения замещая новыми?
Ничего эта коллекция не удаляет.
0
25 / 19 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
25.06.2018, 10:04  [ТС]
Usaga, Жаль (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2018, 10:04

Чтение в richtextbox больших файлов сопровождается большим потреблением памяти приложением
Здравствуйте! Вот мне не понятно: я читаю содержимое файла в RichTextBox (вес этого файла 207 мб). ...

Многопоточное чтение больших файлов
Доброго времени суток! Нужен совет. Имеется, скажем, 10 текстовых файлов 1.txt;2.txt и т.д. и метод, которому на вход подаётся строка из...

Чтение больших файлов Excel
пытаюсь считать данные с XLSX файла (500 000 строк). на MSDN наткнутся на статью каким образом это можно сделать....

Чтение файлов больших размеров >1Гб
Товарищи, подскажите как прочитать файл размером больше 1Гб.. у меня при чтении оперативка заканчивается и выдает ошибку.. как можно...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru