【问题标题】:Parse line of text解析文本行
【发布时间】:2010-09-08 13:16:49
【问题描述】:

我有数千个文本文件,每个文件只包含一行文本。

任何单个文件都如下所示:

somevalue1|somevalue2|somevalue3|somevalue4|somevalue5

格式永远不会改变,从上面你可以看到每个值是如何用“|”分隔的。每个文件中总是正好有 5 个值。

有人可以在正确的方向上帮助我吗?我不确定如何将每个值提取到单独的字符串中,例如:

string value1,value2,value3,value4,value5;
value1=somevalue1;
value2=somevalue2; 

等等等等

我希望这是有道理的。并感谢任何帮助

谢谢

【问题讨论】:

  • 您正在尝试做的事情称为对字符串进行标记
  • 谢谢盖奇,我很感激。 :-),我敢打赌,它会更容易找到关于我想要完成的事情的信息!非常感谢

标签: c# .net parsing text


【解决方案1】:

String.Split 为你做这件事:

string line = "somevalue1|somevalue2|somevalue3|somevalue4|somevalue5";
string [] parts = line.Split(new[] { '|' });

然后您可以从该数组中读取单独的值:

string value1 = parts[0];
string value2 = parts[1];
// and so on

现在我可能会稍微偏离主题,但我假设不同的值具有不同的含义,因此可以将它们视为表格中的列?如果是这种情况,我可能会创建一个以更易于发现的形式公开这些值的类。让我们假设这五个值是 first namelast namecompanyfavorite colorname的宠物独角兽。然后你可以创建以下类:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public string FavoriteColor { get; set; }
    public string NameOfPetUnicorn { get; set; }
}

...然后您会将行中的值放入这样的人中:

private static Person GetPerson(string line)
{
    string [] parts = line.Split('|'); // as per Dan Tao's suggestion
    return new Person {
        FirstName = parts[0],
        LastName = parts[1],
        Company = parts[2],
        FavoriteColor = parts[3],
        NameOfPetUnicorn = parts[4]
    };
}

【讨论】:

  • 你也可以简单写成:line.Split('|')(因为分隔符是params参数)。
【解决方案2】:

String.Split 允许您将字符串拆分为特定字符(或根据需要设置字符集)。它返回字符串值的string[]

【讨论】:

    【解决方案3】:

    如果格式始终保持一致,您应该将文件内容读取到文件末尾成一个字符串,然后使用 String.split() 将您的组件字符串拆分为带有分隔符的字符(在这种情况下为 | )。

    string.split http://msdn.microsoft.com/en-us/library/b873y76a.aspx

    【讨论】:

      【解决方案4】:
          // for each file
          string contents = ""; // read in the whole file into this variable
          foreach (string line in contents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
          {
              string[] values = line.Split('|'); 
              // do something with the values, accessing the first one as values[0] etc
          }
      

      【讨论】:

        【解决方案5】:

        最简单的方法是字符串拆分:

        字符串输入 = "somevalue1|somevalue2|somevalue3|somevalue4|somevalue5"; string[] someValues = input.Split('|');

        http://msdn.microsoft.com/en-us/library/y7h14879.aspx

        【讨论】:

          【解决方案6】:

          如果您正在寻找一些通用解决方案,您可以尝试FileHelpers

          FileHelpers 是一个免费且易于使用的 .NET 库,用于从文件、字符串或流中的固定长度或分隔记录导入/导出数据。

          使用FileHelpers,您可以定义文件记录如下:

          [DelimitedRecord ("|")]
          public class DataFileRecord
          {
              public string SomeValue1 { get; set; }
              public string SomeValue2 { get; set; }
              public string SomeValue3 { get; set; }
              public string SomeValue4 { get; set; }
              public string SomeValue5 { get; set; }
          }
          
          /*reading section*/
          var engine = new DelimitedFileEngine<DataFileRecord> ();
          DataFileRecord[] records = engine.ReadFile (path);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-26
            • 1970-01-01
            • 2023-03-06
            • 2020-05-03
            • 2015-04-26
            • 2018-11-11
            • 2013-03-03
            相关资源
            最近更新 更多