2013-10-28 140 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"