Разбор строки текста - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть тысячи текстовых файлов, и каждый файл содержит только одну строку текста.

Любой отдельный файл выглядит так:

somevalue1|somevalue2|somevalue3|somevalue4|somevalue5

Формат никогда не меняется, и сверху вы можете видеть, как каждое значение отделяется "|". И в каждом файле всегда ровно 5 значений.

Может кто-нибудь помочь мне в правильном направлении? Я не уверен, как я мог бы извлечь каждое значение в отдельную строку, например:

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

и т. Д. И т. Д.

Надеюсь, это имеет смысл. И ценю любую помощь на всех

Спасибо

Ответы [ 6 ]

10 голосов
/ 08 сентября 2010

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]
    };
}
0 голосов
/ 08 сентября 2010

Если вы ищете какое-то общее решение, вы можете попробовать 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);
0 голосов
/ 08 сентября 2010

Самый простой способ - это разбиение строки:

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

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

0 голосов
/ 08 сентября 2010
    // 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
    }
0 голосов
/ 08 сентября 2010

ЕСЛИ формат всегда согласован, вы должны прочитать содержимое файла до конца файла в одну строку, а затем использовать String.split (), чтобы разбить строки вашего компонента с разделителем char (в данном случае это |).

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

0 голосов
/ 08 сентября 2010

String.Split позволяет разделить строку на определенный символ (или набор символов, если необходимо).Возвращает string[] строковых значений.

...