2012-05-12 5 views
3

Я пытаюсь читать из файла pbx с помощью StreamReader, редактировать содержимое и отображать содержимое в новый файл с помощью TextReader в C#.StreamReader и TextReader

Это моя первая задача разработки в C#.

Я изучил java в uni, и моя новая работа использует C#.

В основном я должен прочитать список записей, содержащихся в файле pbx, из телефонной системы. Однако эти записи содержат строку хороших записей вызовов, за которыми следует строка с несколькими изворотливыми символами, за которой следует еще одна строка хороших записей.

Моя задача - прочитать этот файл по строкам, а затем написать фрагмент кода, чтобы игнорировать строки с изворотливыми символами и выводить хорошие записи в новый файл на моем диске c: \, который ive называется output.txt ,

Я могу написать цикл while, чтобы вытащить изворотливых символов, но im unsure из кода C#, чтобы читать из файла pbx на моем диске c, а затем выводить отредактированное содержимое в новый файл с именем output.txt, также на мой c диск.

Я новичок в C# и исследовал Google в течение нескольких часов на этом. Просто нужно небольшое руководство, и меня нет ...

+5

Добро пожаловать на сайт. Было бы намного проще помочь вам, если бы вы разместили код, который вы начали писать: мы могли бы обнаружить ошибку или две намного быстрее, чем помочь вам написать это с нуля. – dasblinkenlight

+2

Обходной путь для «изворотливого» требует четкого определения «изворотливого». С некоторыми разногласиями, что они не хитрили вообще, а просто побочным эффектом чтения файла с неправильной кодировкой. Начните с просмотра содержимого файла с помощью шестнадцатеричного просмотра, чтобы вы могли видеть фактические байтовые значения и обнаруживать шаблон. –

ответ

4

Вы не указали кодировки файлов, поэтому я придерживаюсь значений UTF-8 по умолчанию.

Одним из вариантов является «правильным» метод цикла, который читает, чеки, и условно пишет, например:

var inputFilePath = @"C:\temp\input.txt"; 
var outputFilePath = @"C:\temp\output.txt"; 

using (var reader = File.OpenText(inputFilePath)) 
using (var writer = File.CreateText(outputFilePath)) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     var isValidLine = CheckLine(line); 
     if (isValidLine) 
     { 
      writer.WriteLine(line); 
     } 
    } 
} 

Поскольку вы помечено это VS2008, я предполагаю, что это означает, что вы ограничены на .NET 3.5, но в версии 4.0 или более поздней версии вы можете читать и писать перечисления, а затем использовать это (в .NET 3.5 вам нужно будет прочитать все строки в памяти, фильтровать, а затем написать все строки).

var inputFilePath = @"C:\temp\input.txt"; 
var outputFilePath = @"C:\temp\output.txt"; 

var inputLines = File.ReadLines(inputFilePath); 

var linesToWrite = inputLines 
    .Where(line => IsLineValid(line)); 

File.WriteAllLines(outputFilePath, linesToWrite); 
+2

Придерживаясь значения по умолчанию, это очень вероятная причина проблемы OP. Вероятность того, что файл журнала PBX был записан в utf8, * очень * низкий. По крайней мере, рекомендуем и покажите использование Encoding.Default –

Смежные вопросы