我知道这真的是一个简单的问题,但感觉我已经阅读了互联网上的所有帖子,但我找不到任何可以解决我问题的内容。我知道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; }
然后在我的问题上,我如何阅读文本文件中的所有文本并删除所有空格?
答案 0 :(得分:4)
您可以将string.Split
与StringSplitOptions.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"
中那样掩盖它们。