2009-09-02 53 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

而不是具有中斷的無限for循環,您應該使用while循環,如下所示:while(reader.Peek()> -1) – 2009-09-02 16:59:05

+3

我會避免(;;)循環的無限;看起來像不好的樣式,可以簡化爲「while((s = reader。 Readline())!= null){....} – 2009-09-11 19:11:17

3

您需要使用FileStream類打開文件,StreamReader類從文件中讀取,並且將StreamWriter類寫回到文件。

您可以創建一個FileStream這樣的:

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

然後包裹在FileStream一個StreamReader

StreamReader reader = new StreamReader(file); 

然後,在每行閱讀,做你的字符串處理(添加逗號和括號):

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

我有一個問題。當我打開同一個文件時,我必須寫回所有的數據?而不僅僅是編輯的數據 – 2013-10-16 17:01:27

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

您應該使用using語句來確保對象(FileStreams,StreamReaders和StreamWriters已妥善處置) – 2009-09-02 16:49:26

1
  1. 加載整個文件
  2. 使用string.split( '\ n')將內容劃分爲行
  3. 使用字符串。替換('',',')以插入逗號。
  4. 保存文件。

或者,正如waqasahmed所說,只要做到一條就行。

參見:http://www.csharphelp.com/archives/archive24.html

而且,這聽起來很像一個家庭作業的問題。也許我們應該有一個「作業」標籤?

13

事情是這樣的:(未測試)

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以確保對象正確處置 – 2009-09-02 16:50:02

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

全部在一個語句中!無與倫比:-D – 2009-09-04 07:18:50