2009-09-02 15 views
9

例えば、私は読みtxtファイルを持っている:C#で.txtファイルを読み込んで編集するにはどうすればよいですか?

12 345 45 
2342 234 45 2 2 45345 
234 546 34 3 45 65 765 
12 23 434 34 56 76 5 

私はすべての数字の間にカンマを挿入したい、それぞれの最後に、各ラインの初めと右ブレースに左括弧を追加ライン。編集後は次のようになります。

{12, 345, 45} 
{2342, 234, 45, 2, 2, 45345} 
{234, 546, 34, 3, 45, 65, 765} 
{12, 23, 434, 34, 56, 76, 5} 

どうすればいいですか?

答えて

1

(テストが、私はそれがうまく動作するだろうかなり確信していない)私はかなりあなたはすべて私にあなたの答えを与えていた間、それを考え出したが、おかげでたくさんとにかく:)。私はこの思い付いた:

TextReader reader = new StreamReader("triangle.txt"); 
TextWriter writer = new StreamWriter("triangle2.txt"); 
for (; ;) 
{ 
    string s = reader.ReadLine(); 
    if (s == null) 
     break; 
    s = s.Replace(" ", ", "); 
    s = "{" + s + "},"; 
    writer.WriteLine(s); 
} 
+1

無限ループの代わりに、 while(reader.Peek()> -1) –

+3

(;;)ループは無限にならないようにしてください;悪いスタイルのように見えますが、これを "while((s = reader。 Readline())!= null){....} –

3

ファイルを開くにはFileStreamクラス、ファイルから読み込むにはStreamReaderクラス、ファイルに書き戻すクラスはStreamWriterクラスを使用する必要があります。

あなたはこのようなFileStream作成することができます:カンマや括弧を追加する(各行に読んで、あなたの文字列処理を行う、その後

StreamReader reader = new StreamReader(file); 

FileStream file = new FileStream("FileName", FileMode.Open, FileAccess.ReadWrite); 

次にStreamReaderFileStreamをラップします):

while(reader.EndOfFile) 
{ 
    string currentLine = reader.ReadLine(); 
    // do your string processing here and save the result somewhere 
} 

最後に、01をラップしますStreamWriterで、バックファイルに変更した文字列を記述します。

StreamWriter writer = new StreamWriter(file); 

// Write your content here 
writer.Write("my content"); 

彼らと一緒に作業した後、あなたのストリームを閉じることを忘れないでください。

reader.Close(); 
writer.Close(); 
file.Close(); 
+0

を。同じファイルを開くと、すべてのデータを書き戻す必要がありますか? –

3

各行を読みます。

「「で」」(コンマとスペース)を文字列の前にブラケットを追加し、その後

の後にスペースを置き換える

5
あなたがロジックに取り組む最初の代わりに、直接のためにそれを提供する人を求めなければならない

君は。ファイルの書き込み/読み込み用として、ここに行く:

//write  
FileStream fs = new FileStream("file_name", FileMode.Create); 
StreamWriter w = new StreamWriter(fs, Encoding.UTF8); 
w.WriteLine("text_to_write"); 
w.Flush(); 
w.Close(); 
fs.Close(); 

//read 
fs = new FileStream("file_name", FileMode.Open); 
StreamReader r = new StreamReader(fs, Encoding.UTF8); 
Console.WriteLine(r.ReadLine()); 
r.Close(); 
fs.Close(); 
+1

オブジェクト(FileStreams、StreamReaders、およびStreamWriterが正しく処分されていることを確認するには、usingステートメントを使用する必要があります。 –

1
  1. 読み込み、ファイル全体
  2. 利用のstring.Split( '\ n' を)ライン
  3. 使用文字列に内容を分割します。カンマを挿入するには( ''、 '、')を置き換えます。
  4. ファイルを保存します。

または、ワクタサンプドが言ったように、1行に1つだけしてください。

も参照してください:http://www.csharphelp.com/archives/archive24.html

また、これは疑い宿題の問題のように聞こえます。たぶん私たちは "宿題"タグを持っているべきですか?このような

13

何か:(NOTテスト済み)

string filename = @"c:\yourfilename.txt"; 
StringBuilder result = new StringBuilder(); 

      if (System.IO.File.Exists(filename)) 
      { 
       using (StreamReader streamReader = new StreamReader(filename)) 
       { 
        String line; 
        while ((line = streamReader.ReadLine()) != null) 
        { 
         string newLine = String.Concat("{", line, "}", Environment.NewLine); 
         newLine = newLine.Replace(" ", ", "); 
         result.Append(newLine); 
        } 
       } 
      } 

using (FileStream fileStream = new FileStream(filename , fileMode, fileAccess)) 
      { 
       StreamWriter streamWriter = new StreamWriter(fileStream); 
       streamWriter.Write(result); 
       streamWriter.Close(); 
       fileStream.Close(); 
      } 
+0

+1オブジェクトが正しく処分されていることを確認するため) –

3

編集SLINEを変更する方法を追加します。

StreamReader sr = new StreamReader("path/to/file.txt"); 
    StreamWriter sw = new StreamWriter("path/to/outfile.txt"); 
    string sLine = sr.ReadLine(); 
    for (; sLine != null; sLine = sr.ReadLine()) 
    { 
     sLine = "{" + sLine.Replace(" ", ", ") + "}"; 
     sw.WriteLine(sLine); 
    } 
3
string [] lines = File.ReadAllLines("input.txt"); 
var processed = lines.Select(line => string.Format("{{{0}}}", line.Replace(" ", ", "))); 
File.WriteAllLines("output.txt",processed.ToArray()); 
18

楽しさと利益のためにいくつかのLINQを追加しました;)(最適化のための部屋を):私は疑問を持っている

System.IO.File.WriteAllLines(
    "outfilename.txt", 
    System.IO.File.ReadAllLines("infilename.txt").Select(line => 
     "{" + 
     string.Join(", ", 
      line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries) 
     ) + "}" 
    ).ToArray() 
); 
+0

一言でいっぱいです! –

関連する問題