解析文本行

时间:2010-09-08 13:16:49

标签: c# .net parsing text

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

任何单个文件都是这样的:

somevalue1|somevalue2|somevalue3|somevalue4|somevalue5

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

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

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

等等。

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

谢谢

6 个答案:

答案 0 :(得分:10)

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

现在我可能略微偏离主题,但我认为不同的值具有不同的含义,因此它们可以被视为表中的列?如果是这种情况,我可能有意义创建一个以更易被发现的形式公开这些值的类。让我们假设五个值是名字姓氏公司最喜欢的颜色名称宠物独角兽。然后你可以创建以下类:

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

答案 1 :(得分:0)

String.Split允许您在特定字符(或者需要的字符集)上拆分字符串。它返回string[]个字符串值。

答案 2 :(得分:0)

如果格式始终一致,则应将文件内容读取到文件末尾为一个字符串,然后使用String.split()分隔成带有分隔字符的组件字符串(在本例中为| )。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

string input =“somevalue1 | somevalue2 | somevalue3 | somevalue4 | somevalue5”;   string [] someValues = input.Split('|');

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

答案 5 :(得分:0)

如果您正在寻找一些通用解决方案,可以尝试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);