2012-05-12 7 views
3

StreamReaderを使用してpbxファイルから読み取ろうとしています。内容を編集し、c#でTextReaderを使用して内容を新しいファイルに表示しています。StreamReaderとTextReader

これはC#での私の最初の開発作業です。

私はuniでjavaを学びました。私の新しい仕事はC#を使用しています。

基本的には、電話システムからpbxファイルに含まれるレコードのリストを読み込む必要があります。しかし、これらのレコードには良好な通話記録があり、それに続いていくつかの悪質な文字が続き、その後に別の良好な記録が続きます。

私の仕事は、このファイルを1行ずつ読み込んで、悪質な文字を含む行を無視し、良いレコードをc:\ドライブの新しいファイルに出力することです。このファイルはoutput.txt 。

私はdodgy文字を取り出すためにwhileループを書くことができますが、私のCドライブのpbxファイルから読み込んで、編集した内容をoutput.txtという新しいファイルに出力するc#コードが不明です私のCドライブ。

私はC#を初めて使用しており、これについて数時間Googleを調査しました。ちょっとしたガイダンスが必要です。私は離れています。

+5

ようこそ。あなたが書き始めたコードのいくつかを投稿した場合は、手助けする方がはるかに簡単です。これを最初から書くのを助けるよりもずっと速いエラーを発見することができます。 – dasblinkenlight

+2

"dodgy"の回避策には、 "dodgy"という堅実な定義が必要です。いくつかのオッズでは、彼らはまったくダッジではなく、間違ったエンコーディングでファイルを読むという副作用しかありません。まず、ファイル内容を16進表示で見て、実際のバイト値を確認してパターンを検出します。 –

答えて

4

ファイルエンコーディングは言及していませんでした。ここではUTF-8のデフォルトを固執しています。

1つのオプションは、読み込みループの「定期的な」メソッドであるかどうかを確認し、条件付きで書き込み、このような:

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のトラブルの原因になります。 utf8でPBXログファイルが書き込まれた確率は*非常に低いです。少なくともEncoding.Defaultの使用を推奨し、表示する –