2016-02-29 161 views
0

我想寫一個文本文件,從一個數據表,文本文件,後來將由其他應用程序導入,因此,我需要沒有空行在導出的文件(在最後或之間)。 我用下面的代碼:如何擺脫使用StreamWriter空行

DataTable table = FisierSoldata.dtSoldata; 
var result = new StringBuilder(); 
     foreach (DataRow row in table.Rows) 
     { 
      for (int i = 0; i < table.Columns.Count; i++) 
      { 
       result.Append(row[i].ToString()); 
       result.Append(i == table.Columns.Count - 1 ? "\n" : " "); 
      } 
      result.AppendLine(); 
     } 

     StreamWriter objWriter = new StreamWriter(filePath, false); 
     objWriter.WriteLine(result.ToString()); 
     objWriter.Close(); 

我的表具有26條記錄,並生成該文件時,它後面跟着一個空行和另一數據線等,並在最後一數據線後結束一個數據線就有3個空行。 如何修改代碼,以便只有數據之間沒有空的數據而沒有最後3個空的數據? Regards,

LE:我已經找到了一種解決方法,通過閱讀一些類似的線程,但解決方案是使用streamwriter和streamreader來從文件中刪除不需要的數據(空行) 。但我想知道是否有一種從一開始就根據需要獲取文件的方法。

+0

如果(String.isnullorempty(result.tostring()){ objWriter.WriteLine(result.ToString());} –

+1

你真的想使用空格作爲列分隔符?這是您可以使用的最容易出錯的方法之一。祈禱一個值永遠不會包含一個。 –

+0

我必須使用它,作爲進一步處理數據的應用程序使用空間作爲分隔符只有數字數據,沒有用戶推測數據 – BogdanM

回答

3

爲什麼不使用File.WriteAllLines,它使用的幕後StreamWriter但允許簡單的代碼:

var fileLines = table.AsEnumerable() 
    .Select(row => String.Join(" ", row.ItemArray)) 
    .Where(line => !String.IsNullOrWhiteSpace(line)); 
File.WriteAllLines(filePath, fileLines); 

但你真的想使用空格作爲列分隔符?這非常容易出錯。只要一個字段值包含空格,它就會失敗。

+0

非常感謝。它,作爲應用程序呃將會處理數據使用空間作爲分隔符,並且只有數字數據,沒有用戶推測數據。 – BogdanM

+0

真的很好的解決方案。喜歡Linq的方法。 – BogdanM

+0

好吧,這是一個改進,也是我學習更多的機會,但它仍然不能解決漏洞問題,因爲生成的文件有一個空行。我應該使用streamReader並解析導出的文件並刪除最後一個空行嗎?或者是你的代碼中缺少的東西?問候, – BogdanM

0

我會盡量避免將空行添加到Stringbuild。該Stringclass應給予適當的功能,也許是這樣的:

  String stringToTestIsEmpty = row[i].ToString(); 
      //Check if it is not an empty line 
      if(! String.IsNullOrWhiteSpace(stringToTestIsEmpty)) 
      { 
       resutl.Append(stringToTestIsEmpty); 
      }