Linq и streamreader получение строк

Используя LINQ, что efficent путь состоит в том, чтобы получить каждую строку из разграниченного вкладкой .txt файла (и затем получить каждое слово, обычно что строка. Разделение (...) делает)?

var v = from line in File.ReadAllLines()
   select n

Часть этого решения, которому я верю. Я не возражаю, если это использует возврат урожая.

Править: Я также видел потоки при здесь детализации точно, что я пытаюсь сделать, но не могу найти их.

5
задан GurdeepS 23 February 2010 в 17:16
поделиться

2 ответа

Я не совсем понимаю, о чем вы спрашиваете, но похоже, что вы пытаетесь получить каждое слово из файла с разделителями табуляции как IEnumerable . Если это так, попробуйте следующее

var query = File.ReadAllLines(somePathVariable)
                .SelectMany(x => x.Split(new char[] { '\t' });
7
ответ дан 14 December 2019 в 08:49
поделиться

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

В моем случае мне нужно было разрезать высоту и ширину изображения наполовину.

Вот что я сделал.

   private Image getImageFromBytes(byte[] myByteArray)
    {                        
        System.IO.MemoryStream newImageStream = new System.IO.MemoryStream(myByteArray, 0, myByteArray.Length);
        Image image = Image.FromStream(newImageStream, true);
        Bitmap resized = new Bitmap(image, image.Width / 2, image.Height / 2);
        image.Dispose();
        newImageStream.Dispose();
        return resized;
    }
-121--1276263-

Я нахожусь в одной лодке с вами, занимаясь большим количеством приложений бизнес-типа, ничего «веселого», как игры, компиляторы или поисковые системы.

Ваш пробег будет отличаться, но, по крайней мере, по моему собственному опыту, многие команды разработчиков неохотно прыгают прямо в F #, потому что никто другой в команде не знает и даже не слышал об этом. И сразу же перед битой приходится бороться с такими вопросами, как «что это делает иначе, чем C #?» Если вы можете убедить своего босса позволить вам написать несколько демонстрационных приложений с ним, перейдите к этому!

При этом я нахожу, что C # не очень хорош в бизнес-правилах, но он обрабатывает GUI как чемпион; Неизменность F # делает разработку GUI неловкой, но бизнес-правила и рабочие процессы чувствуют себя естественно. Таким образом, два языка имеют свои сильные стороны и комплиментарны слабости друг друга.

В моих собственных приложениях LOB F # выполняет кружки вокруг C # в нескольких областях: асинхронные рабочие процессы

  • F # и процессоры почтовых ящиков на порядки проще в работе, чем собственные потоки и даже параллельная библиотека задач. С момента использования процессоров почтовых ящиков для межсетевой связи, я даже не помню, когда в последний раз мне приходилось блокировать или thread.join () что-либо для синхронизации вообще.

  • Определение механизмов бизнес-правил и DSL с объединениями FTW! Каждое нетривиальное приложение LOB, над которым я когда-либо работал, имеет свой язык и интерпретатор с полукоженными правилами, и почти всегда основано на рекурсивном включении перечисления, чтобы пройтись по правилам и найти совпадение. Текущий проект, который у меня есть, теперь содержит более 1300 общедоступных классов, 900 или около того являются простыми классами контейнеров для представления правила. Я думаю, что представление правил как профсоюза F # значительно уменьшит вздутие кода и сделает лучший двигатель.

  • Неизменяемый код просто работает лучше - если вы получаете новый объект с недопустимым состоянием, вам не нужно искать далеко, чтобы найти нарушающую строку кода, все, что вам нужно знать, находится в стеке вызовов. Если у вас есть изменяемый объект с недопустимым состоянием, иногда приходится тратить много времени на его отслеживание. Вы можете написать неизменяемый код в C #, но его действительно трудно не упасть на мутабельность, особенно когда вы изменяете объект в цикле.

  • Я ненавижу нули. Я не могу дать точную оценку, но кажется, что половина ошибок, которые мы получаем в производстве, являются пустыми ссылочными исключениями - объект неправильно инициализирован, и вы не знаете об этом до тех пор, пока у вас не будет 30 стековых кадров в коде. Я думаю, что F # поможет нам написать больше свободного кода с первого раза.

C # обычно хорошо работает, когда:

  • Вы пишете GUI-код или работаете с изменяемыми по своей сути системами.

  • Предоставление DLL или веб-службы множеству различных клиентов.

  • Ваш босс не позволит вам использовать инструменты, которые вы хотите;)

Поэтому, если вы сможете преодолеть "почему мы хотим использовать новое языковое препятствие", я думаю, что F # действительно облегчит вашу жизнь.

-121--1332807-

Использование File.ReadAllLines является простым - но не обязательно наиболее эффективным, поскольку он считывает всю строку в память.

Краткая версия, вероятно, будет:

var wordsPerLine = from line in File.ReadAllLines(filename)
               select string.Split(line, '\t');

foreach(var line in wordsPerLine)
{
    foreach(word in line)
    {
        // process word...
    }
}

Если вы хотите, чтобы один перечисляемый из слов, вы можете использовать

0
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: