2013-10-28 179 views
0

我知道這確實是一個簡單的問題,但感覺就像我已經閱讀了所有在互聯網上的文章,但我還沒有找到任何可以解決我的問題的東西。我知道Java有一個stringtokenizer,但我使用C#。 我想要做的事情是,我有一個文本文件,看起來像這樣:刪除文本文件中的空格並閱讀文本C#

ProductNr ProductName   CustomerNr  Customer 
AAAAA  Shoes    S111   Shoebuyer 
BBBBB  Umbrella   U222   Umbrellabuyer 

正如你可以看到的tabindex被messedup所以我不能使用.Split(\ t)和我也嘗試了.Slip(''),但這只是分裂的地方有一個空間。 我想要做的事情是刪除單詞之間的所有空格,並只讀取AAAAA Shoes S111 Shoebuyer,然後在下一行讀取同樣的內容。

我試圖改變文本文件,所以它與(,)分開,然後我寫下面的代碼。這適用於逗號,但我還沒有能夠應用這個問題。

using (StreamReader file = new StreamReader("MyTestFile.txt")) 
      { 
       string line; 
       while ((line = file.ReadLine()) != null) 
       { 
        char[] delimiters = new char[] { ',' }; 
        string[] parts = line.Split(delimiters); 

        FileList objIntäkt = new FileList(); 
        objIntäkt.ProductNr = parts[0]; 
        objIntäkt.Product = parts[1]; 
        objIntäkt.CustomerNr = parts[2]; 
        objIntäkt.Customer = parts[3]; 

        objIntäkts.Add(objIntäkt); 
       } 
       //Stänger filen 
       file.Close(); 
      } 

而在我的文件清單類我有我想從文本文件閱讀的東西getter和setter方法:

public string ProductNr { set; get; } 
public string Product { set; get; } 
public string CustomerNr { set; get; } 
public string Customer { set; get; } 

然後我的問題,我如何在文本文件閱讀所有文本並刪除所有的空格?

+0

你確定你的數據項目本身不會包含空間嗎? –

回答

4

您可以使用string.SplitStringSplitOptions.RemoveEmptyEntries

string[] parts = line.Split(new[]{' ', '\t'}, 
       StringSplitOptions.RemoveEmptyEntries); 

注意,如果一個項目至少包含一個空格,您將有無效數據。

+0

謝謝!現在它工作了! – Nisse

0

使用Regex.Split

var parts = Regex.Split(line, "\w+"); 

這將各執行中的任意數量的空格字符。

0

如果您可以對文件內容做出一些安全的假設,則可以使用正則表達式來解析該行。從你的例子來看,產品和供應商數字背後有某種邏輯;您可以創建一個正則表達式,從行中提取零件。 有關.NET中正則表達式的更多信息,請參閱http://msdn.microsoft.com/en-us/library/hs600312.aspx

0

如果詞本身不包含空白頻段工作的:

var invalidData = File.ReadLines(filePath); 
var validData = invalidData 
    .Select(line => { 
     var sArr = line.Split(new[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries); 
     return string.Join(" ", sArr); 
    }); 
string validText = string.Join(Environment.NewLine, validData); 
File.WriteAllText(filePath, validText); 

然而,只要在列的單詞或數據中包含一個空白的Split將失敗。您應該考慮使用現有的CSV解析器,該解析器還可處理文本列(如this)周圍的引號字符。那麼你應該掩蓋他們在"Umbrella buyer"