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

本文关键字:读取 取文本 空格 文本 文件 删除 | 更新日期: 2023-09-27 18:37:02

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

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

如您所见,选项卡索引一团糟,所以我无法使用.Split(''t) 和我也尝试过 .Slip(' '),但这只是在有空格的地方分裂。我想做的是删除单词之间的所有空格,只阅读 AAAAA 鞋 S111 鞋买主,然后在下一行阅读相同的内容。

我尝试更改文本文件,使其与(,)分隔,然后编写了下面的代码。这适用于逗号,但我无法将其应用于我的问题。

 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; }

然后对于我的问题,如何读取文本文件中的所有文本并删除所有空格?

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

您可以将string.SplitStringSplitOptions.RemoveEmptyEntries一起使用

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

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

使用 Regex.Split

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

这将拆分为连续任意数量的空格字符。

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

如果单词本身不包含空格,则有效:

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"一样屏蔽它们。