Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
iMCrazy
1 / 1 / 0
Регистрация: 12.10.2014
Сообщений: 32
#1

Считывание файла без загрузки его в память - C#

20.04.2015, 17:05. Просмотров 462. Ответов 5
Метки нет (Все метки)

Приветствую всех, столкнулся с проблемой имею текстовый документ(более 20млн строк).
Нужно реализовать построчное считывание файла без загрузки в память (база более 20млн хрен загрузишь без лагов)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2015, 17:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание файла без загрузки его в память (C#):

Редактирование XML-документа без загрузки его в память - C#
Всем привет. Подскажите, пожалуйста, стандартное средство для редактирования XML-документа без загрузки его в память, а именно добавления...

Считывание текста из файла и вывод в другой файл предложения без запятых - C#
Составить программу, которая считывает текст из файла и выводит на экран и в другой файл исходный текст и предложения, не содержащие...

Как прописать автозапуск файла после его загрузки? - C#
Написал я код для загрузки файла с сервера на комп значит, а вот теперь вопрос, как заставить файл запуститься сразу после загрузки?

Как извлечь имя файла без его полного пути и расширения? - C#
как извлечь имя файла без его полного пути и расширения? какой код для кнопки сохранить в текстовом редакторе?

Шифрация большого файла без создания его копии для экономии места - C#
Шифрую и дешифрую файл AES вот таким способом( копипаста с msdn) public void EncryptFile(string inputFile, string outputFile) ...

.NET 4.x Удаление изображений после загрузки их в память - C#
Доброго времени суток. Возникла проблема, которую постараюсь кратко описать: Имеется некий pictureBox1, так же есть архив, содержащий...

5
insite2012
Модератор
Эксперт .NET
4536 / 3488 / 841
Регистрация: 12.10.2013
Сообщений: 10,279
Записей в блоге: 2
20.04.2015, 17:19 #2
iMCrazy, считывайте в память определенное количество строк (лучше это вынести в отдельный поток), работаете с ними, потом читаете сл. порцию и так далее.
1
iMCrazy
1 / 1 / 0
Регистрация: 12.10.2014
Сообщений: 32
20.04.2015, 17:21  [ТС] #3
insite2012, А как считать в память определённое кол-во строк? Я даже понятия не имею как это сделать
0
OwenGlendower
Модератор
Эксперт .NET
7416 / 6392 / 2379
Регистрация: 17.03.2014
Сообщений: 12,402
Записей в блоге: 1
20.04.2015, 18:32 #4
iMCrazy, используй StreamReader + ReadLine в цикле или метод File.ReadLines
1
insite2012
Модератор
Эксперт .NET
4536 / 3488 / 841
Регистрация: 12.10.2013
Сообщений: 10,279
Записей в блоге: 2
20.04.2015, 20:01 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
iMCrazy, вот как-то так, в двух потоках. Один читает определенное количество строк, потом встает на паузу, в это время работает второй, который их обрабатывает. Как второй обработал группу - опять стартует первый, а второй ожидает. И так по кругу.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using System.ComponentModel;
 
namespace BigFileReader_Demo {
    class Program {
        static void Main(string[] args) {
            BigFileReader reader = new BigFileReader(@"C:/Test.txt", 50);
            reader.Run();
            Console.ReadLine();
        }
    }
    class BigFileReader{
        private string pathToFile;
        private int count;
        private Queue<string> data = new Queue<string>();
        private EventWaitHandle flagGo = new AutoResetEvent(false);
        private EventWaitHandle flagReady = new AutoResetEvent(false);
 
        public BigFileReader(string path, int linesCount) {
            if (!File.Exists(path)) {
                throw new FileNotFoundException("File not exists!");
            }
            pathToFile = path;
            count = linesCount;
        }
 
        public void  Run() {
            new Thread(ProcessOnLines).Start();
            new Thread(ReadLinesFromFile).Start();
        }
        void ReadLinesFromFile() {
            using (StreamReader sr = File.OpenText(pathToFile)) {
                string line = "";
                flagGo.WaitOne();
                while ((line = sr.ReadLine()) != null) {
                    data.Enqueue(line);
                    if (data.Count == count) {
                        flagReady.Set();
                        flagGo.WaitOne();
                    }
                }
            }
            data.Enqueue(null);
            flagReady.Set();
            flagGo.WaitOne();
        }
        void ProcessOnLines() {
            while (true) {
                flagGo.Set();
                flagReady.WaitOne();
                Console.WriteLine("Processing Next Data Block!");
                while (data.Count != 0) {
                    string line = data.Dequeue();
                    if (line == null) {
                        Console.WriteLine("Data is Empty!");
                        flagGo.Dispose();
                        flagReady.Dispose();
                        return;
                    }
                    //Тут обрабатываем строку из данной группы
                    Console.WriteLine(line);
                    Thread.Sleep(100);
                }
            }
        }
    }
}
1
TopLayer
685 / 508 / 194
Регистрация: 23.10.2016
Сообщений: 1,206
Завершенные тесты: 7
31.10.2016, 01:30 #6
Цитата Сообщение от insite2012 Посмотреть сообщение
потом встает на паузу, в это время работает второй
А зачем тогда два потока? Делали бы синхронный вызов ProcessOnLines() в соответствующих местах метода ReadLinesFromFile(). И тогда синхронизацию можно выкинуть на помойку.
0
31.10.2016, 01:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2016, 01:30
Привет! Вот еще темы с ответами:

.NET 3.x SharpDevelop, получить название файла без расширения и прибавить 14 дней к дате которая в первой его строке - C#
содержимое 1000.txt файла 2014-08-13 13:50:19 126.48.232.103 2014-08-23 08:53:54 содержимое 2000.txt файла 2014-08-25 13:50:19...

Считывание текста и вывод его на экран - C#
написать програму которая считывает текст из файла и выводит на экран тоолько предложения, состоящих из заданного количества слов.

Расшифровка XML без создания новых файлов (в память) - C#
Доброго времени суток! У меня есть рабочий код, который шифрует xml документ и расшифровывает его. Но дело в том, что в данном случае...

Считывание из файла - C#
Подскажите пожалуйста как считать данные из файла в который идет запись. В данном случае идет запись с микрофона в файл wmv.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru