我有一个我试图解析的文本文件。截至目前,我正在使用String.Split方法来获取字符串标记。
以下是一些示例文本:
GP71011N Sign 1.00 each 4298.96000 4298.96
H50 ENGINE* Sign 1.00 each 9027.65000 9027.65
JR70883* Sign 1.00 each 10674.24300 10674.24
KE31453 Sign 1.00 each 1000.00000 1000.00
MK51645 Sign 6.00 each 13718.06000 82308.36
MK51649 Sign 1.00 each 14331.08000 14331.08
MK51722 Sign 4.00 each 13186.00000 52744.00
ML51651 Sign 5.00 each 15988.00000 79940.00
现在我正在逐行读取文件,并用一个空格删除所有额外的空格,然后我用一个空格对字符串进行标记,但现在我正在查看它......这将无效。< / p>
这是我目前的代码:
string output = "";
string currentPCat = "";
string currentAccount = "";
bool IsValidLine = false;
var lineNo = 1;
while ((line = file.ReadLine()) != null)
{
if(lineNo <= 36)
{
lineNo++;
}
else
{
line = Regex.Replace(line, @"\s+", " ");
var tokens = line.Split(' ');
if (tokens.Count() >= 4 && tokens.Contains("PCAT:"))
{
currentPCat = tokens[1];
currentAccount = tokens[2];
IsValidLine = true;
}
else if (tokens.Count() == 7)
{
if (IsValidLine)
{
output = output + currentPCat + "," + currentAccount + "," + tokens[1] + "," + tokens[2] + "," + tokens[3] + "," + tokens[4] + "," + tokens[5] + "," + tokens[6] + "\r\n";
}
}
else
{
IsValidLine = false;
}
lineNo++;
}
}
我真正需要改变的部分是标记器,所以这部分:
line = Regex.Replace(line, @"\s+", " ");
var tokens = line.Split(' ');
我想我需要删除第一行,并且我希望令牌被2个或更多空格标记。我该怎么做?
答案 0 :(得分:2)
当然 - 使用带有字符串分隔符的overload of String.Split
代替 char 分隔符:
var tokens = line.Split(new string[] {" "},StringSplitOptions.RemoveEmptyEntries);
.Select(s => s.Trim())
.ToArray();
如果段之间有奇数个空格,则Trim()
是删除前导/尾随空格所必需的。
答案 1 :(得分:1)
而不是使用String.Split
使用Regex.Split
并向参数提供"\s{2,}"
。
string[] tokens = Regex.Split(line, @"\s{2,}");