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

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

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

Доброго времени!
Нужно прочесть и пропарсить крупный файл весом в несколько гигабайт.
Подскажите как это сделать...
Заранее благодарю!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2018, 06:25
Ответы с готовыми решениями:

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

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

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

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

51
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 06:37 2
Pin1999, берёте и делаете. Если что-то не получается или работает очень плохо, то сводите свой вопрос к конретному (с примерами кода) и мы помогаем решить.
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 07:35  [ТС] 3
Usaga, Мне бы с головой хватило читать файл по адресной области...
На пример функция:
byte GetFileByADR(string fileName, byte adrStart, byte adrEnd)

Ну и полученные на выходе данные буду парсить...

Есть ли что-то подобное?
0
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 07:37 4
Pin1999, если под "адресной областью" понимается позиция в файле, то да - есть, FileStream.Position.

Не по теме:

Вы вроде бы уже пять лет на форуме, за это время можно было научиться пользоваться тегом "CODE".

1
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 08:11  [ТС] 5
Usaga, Под адресной областью данных файла - мной понимается конкретная часть файла.
Т.Е. Допустим файл в HEX редакторе (картинка из гугла):
Чтение больших файлов (несколько гигабайт)

И я хочу получить данные с определенной его области, на пример с адреса 70 по адрес FF:
Чтение больших файлов (несколько гигабайт)
0
Эксперт .NET
15553 / 11803 / 3096
Регистрация: 17.09.2011
Сообщений: 19,715
24.06.2018, 08:14 6
Цитата Сообщение от Pin1999 Посмотреть сообщение
Под адресной областью файла - мной понимается оконкретная часть файла.
Товарищ Usaga вам дал ответ: используйте свойство Position, устанавливайте его на нужно значение адреса и считывайте сколько надо байт.
1
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 08:14 7
Pin1999, ответ дан выше.
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 09:36  [ТС] 8
Пробую...

Добавлено через 1 час 8 минут
Usaga, kolorotur, Подскажите - как заменить все управляющие символы в строке на точки?
Чтоб не перечислять каждый символ в Replase...
0
Эксперт .NET
15553 / 11803 / 3096
Регистрация: 17.09.2011
Сообщений: 19,715
24.06.2018, 09:51 9
Цитата Сообщение от Pin1999 Посмотреть сообщение
как заменить все управляющие символы в строке на точки?
Вы hex-редактор делаете?
Проверяйте значение символа: если оно меньше 32-х, то заменяйте на точку.
Осторожней с кодировками.
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 09:59  [ТС] 10
kolorotur, Нет.
Просто программа терминальная, и хочу сделать удобный вывод для отладки, слева байты справа ASCII...
Решил на первое время хотяб перевод строки убрать, не работает...
C#
1
Console.Write(BitConverter.ToString(bytes_).Replace((char)0x0A, '.'));
Выводится как и без Replace...

Добавлено через 3 минуты
Блин, мой затуп )))
Прошу прощения )
Не в той строке менял )
Так работает:
C#
1
Console.WriteLine(Encoding.ASCII.GetString(bytes_).Replace((char)0x0A, '.'));
Однако...
Как в .Replace(char, '.') сделать вместо char перечисление всех символов до 32 ?
Чтоб не делать массив...
0
Эксперт .NET
15553 / 11803 / 3096
Регистрация: 17.09.2011
Сообщений: 19,715
24.06.2018, 10:25 11
Цитата Сообщение от Pin1999 Посмотреть сообщение
Как в .Replace(char, '.') сделать вместо char перечисление всех символов до 32 ?
Чтоб не делать массив...
Создайте вспомогательный метод, в котором делайте обход массива и заменяйте любой байт со значением меньше 32-х на 46.
Потом уже скармливайте этот массив декодеру.
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 10:48  [ТС] 12
kolorotur, А без костылей никак?)
0
Эксперт .NET
15553 / 11803 / 3096
Регистрация: 17.09.2011
Сообщений: 19,715
24.06.2018, 11:25 13
Цитата Сообщение от Pin1999 Посмотреть сообщение
А без костылей никак?
А в чем костыльность?
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 11:49  [ТС] 14
kolorotur, Как минимум в том что перебирать каждый символ вручную...
Сделал так:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
static string CtrlChars(string input)
{
    string output = String.Empty;
    
    foreach (char chr in input)
    {
        if (chr < ' ') { output += '.'; }
        else { output += chr; }
    }
    
    return output;
}
0
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 11:50 15
Цитата Сообщение от Pin1999 Посмотреть сообщение
Как минимум в том что перебирать каждый символ вручную...
Товарищ kolorotur такого не советовал.

Цитата Сообщение от Pin1999 Посмотреть сообщение
Сделал так:
А вот это уже точно фигня. Вы представляете сколько мусора создаст это "решение"?
0
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 11:51  [ТС] 16
Usaga, Поправьте )
Я код пишу редко, и для себя, потому не особо быстро развиваюсь...
0
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 11:57 17
Pin1999, два варианта, обычный и "unsafe":

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Program
{
    static string Filterout(string input)
    {
        var chars = input.ToCharArray();
 
        for (int i = 0; i < chars.Length; i++)
        {
            if (chars[i] < 32)
                chars[i] = (char)46;
        }
        return new string(chars);
    }
 
    static unsafe void FilteroutUnsafe(string input)
    {
        fixed (char* ptr = input)
        {
            for (int i = 0; i < input.Length; i++)
            {
                if (ptr[i] < 32)
                    ptr[i] = (char)46;
            }
        }
    }
 
    static void Main()
    {
    }
}
1
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 11:59  [ТС] 18
Usaga, char array сильно отличается от string ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static string Filterout(string input)
{
    var chars = input.ToCharArray();
    
    for (int i = 0; i < chars.Length; i++)
    {
        if (chars[i] < 32)
            chars[i] = (char)46;
    }
    return new string(chars);
}
 
// VS
 
static string CtrlChars(string input)
{
    string output = input;
 
    for (int i = 0; i < input.Length; i++)
    {
        if (output[i] < ' ') { output[i] = '.'; }
    }
 
    return output;
}
0
Эксперт .NET
9427 / 6795 / 1092
Регистрация: 21.01.2016
Сообщений: 25,770
24.06.2018, 12:03 19
Pin1999, char array сильно отличается от конкатенации в цикле.

Добавлено через 59 секунд
Второй вариант не рабочий. Даже не скомпилируется.
1
24 / 18 / 7
Регистрация: 16.08.2013
Сообщений: 1,354
24.06.2018, 12:05  [ТС] 20
Usaga, Точно, давно не кодил ))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2018, 12:05

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru