删除文本文件中的空格并读取文本C#

时间:2013-10-28 10:46:13

标签: c# winforms text-files

我知道这真的是一个简单的问题,但感觉我已经阅读了互联网上的所有帖子,但我找不到任何可以解决我问题的内容。我知道Java有一个stringtokenizer但我在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();
            }

在我的FileList类中,我有想要从文本文件中读取的内容的getter和setter:

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

然后在我的问题上,我如何阅读文本文件中的所有文本并删除所有空格?

4 个答案:

答案 0 :(得分:4)

您可以将string.SplitStringSplitOptions.RemoveEmptyEntries

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

请注意,如果某个项目至少包含一个空格,则您将拥有无效数据。

答案 1 :(得分:0)

使用Regex.Split

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

这将分成一行中的任意数量的空白字符。

答案 2 :(得分:0)

如果您可以对文件内容做出一些安全假设,则可以使用正则表达式来解析该行。从您的示例来看,产品和供应商数量背后有一定的逻辑;您可以创建一个从行中提取零件的正则表达式。 有关.NET中正则表达式的更多信息,请参阅http://msdn.microsoft.com/en-us/library/hs600312.aspx

答案 3 :(得分: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"中那样掩盖它们。