Столкнулся с такой проблемой: есть файл на миллион чисел, разделенных пробелом (одной строкой). Можно ли как-то читать числа по одному? Потому что чтение строки целиком очень нагружает память. Пробовал через StreamReader.Read, но он считывает посимвольно. Конечно, можно читать символы пока не встречу пробел и складывать из них числа, но это кажется не очень красивым вариантом, может есть методы специально для такого? Заранее спасибо за советы.
Напишем нехитрую функцию для чтения из потока
public IEnumerable<int> ReadNumbers(Stream st)
{
var buffer = new StringBuilder();
using (var sr = new StreamReader(st))
{
while(!sr.EndOfStream)
{
char digit = (char)sr.Read();
if (!char.IsDigit(digit))
{
if (buffer.Length == 0) continue;
int ret = Int32.Parse(buffer.ToString());
buffer.Clear();
yield return ret;
}
else {
buffer.Append(digit);
}
}
if (buffer.Length != 0)
{
int ret = Int32.Parse(buffer.ToString());
buffer.Clear();
yield return ret;
}
}
}
Чтобы читать файл побайтово
foreach(var n in ReadNumbers(File.OpenRead(@"D:\temp\sample.txt")))
Console.WriteLine(n);
Чтобы читать файл с буфером в мегабайт
foreach (var n in
ReadNumbers(
new BufferedStream(
File.OpenRead(@"D:\temp\sample.txt"),
1024 * 1024)))
Console.WriteLine(n);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется возможность добавлять объекты с пользовательским именем (textBox + AddButton) в списокДалее, на основе имен этих объектов будут генерироваться...
Сегодня я столкнулся с проблемойЯ загружаю на свой сайт картинку, процесс сохранения работает исправно
В случае успеха происходит процесс авторизации (создание необходимых связей cookies + session + db)Обратите внимание, что в db тоже должна быть связь...