0

我知道这确实是一个简单的问题,但感觉就像我已经阅读了互联网上的所有帖子,但我还没有找到任何可以解决我的问题的东西。我知道 Java 有一个 stringtokenizer,但我在 C# 中。我想做的是我有一个看起来像这样的文本文件:

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

正如您所看到的,tabindex 被搞砸了,所以我不能使用 .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

4 回答 4

4

你可以string.Split使用StringSplitOptions.RemoveEmptyEntries

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

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

于 2013-10-28T10:52:54.680 回答
0

利用Regex.Split

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

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

于 2013-10-28T10:54:28.077 回答
0

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

于 2013-10-28T10:55:03.000 回答
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 解析器,它也可以像这样处理文本列周围的引用字符。然后你应该像在"Umbrella buyer".

于 2013-10-28T10:55:30.633 回答