1

I am trying to split a string from a text file into an array so that I can store them in a class but it is not working; it doesn't split it, it returns the same format in the textfile.txt

using (StreamReader reader = new StreamReader("textfile.txt"))
{
  string line;
  while ((line = reader.ReadLine()) != null)
  {
    char[] delimiters = new char[] { '\t' };
    string[] parts = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < parts.Length; i++)
    {
      MessageBox.Show(parts[i]);
    }

  }
}

the text file contains:

George\t15\tStudent\tAddress\tB:\temp\profilepic.png

I want it to look like this (after the split):

George
15
Student
Address
profilepic.png

Any ideas or help appreciated.

4

4 回答 4

6

“\t”是一个特殊字符,意思是“制表符”。如果您想实际查找\t需要使用的字符串"\\t"@"\t". 您也不需要将其设为 char 数组;字符串有重载。

于 2012-04-20T19:14:38.897 回答
1

使用您提供的示例行,我认为您可以获得的最接近的可能是使用以下正则表达式,也许如果您使用它,您可以让它不给您路径,或者,在您的循环中您可以检查路径并跳过它,这应该告诉你它是否是路径[a-zA-Z]:\\\w*?\\

string[] results = Regex.Split(line, @"(?<!B:)\\t|(?<=B:\\\w*?\\)");

它产生这个列表:

  • 乔治
  • 15
  • 学生
  • 地址
  • 乙:\温度\
  • 个人资料图片.png
于 2012-04-20T20:41:25.930 回答
1

您应该"\\t"用作拆分字符串。你应该得到:
George
15
学生
地址
B:
emp\profilepic.png

不是 profilepic.png

编辑:在我的回答"\\t"中显示"\t"

于 2012-04-20T19:17:36.873 回答
0

您在这里遇到的问题是Escape Sequences。以 ' ' 开头的字符组合\被视为转义序列,它们的行为与常规字符串不同。从链接中的表格可以看出,“ \t”代表一个水平选项卡。因此,当在 C# 中使用 ' \t' 作为分隔符时,它会查找水平制表符,但是您的纯文本中包含实际的字符序列 ' \t',这就是您要查找的内容。

\t那么问题就变成了,如果当我将它用作分隔符时它会搜索水平制表符,我该如何找到它?答案也显示在链接中;' \\' 是 ' ' 的表示\(如果你考虑一下,这是必要的,否则你怎么能找到 ' \(anything)'。所以你的分隔符必须是 ' \\t'。

(应该注意,你也可以用字符串来做到这一点,而不是将所有东西都变成字符数组,原理仍然成立)

于 2012-04-20T19:24:14.263 回答