как разобрать этот текст в c # - PullRequest
0 голосов
/ 05 августа 2010
abc  = tamaz feeo maa roo key gaera porla
Xyz = gippaza eka jaguar ammaz te sanna.

я хочу сделать структуру

public struct word
{
 public string Word;
 public string Definition;
}

как я могу их разобрать и составить список <word> в c #.

как я могу разобрать это в c #

спасибо за помощь, но это текст, и он не уверен, что строка или более то, что я делаю для новой строки

Ответы [ 5 ]

4 голосов
/ 05 августа 2010

Читать строку ввода построчно и делить на знак равенства.

class Entry
{
    private string term;
    private string definition;

    Entry(string term, string definition)
    {
        this.term = term;
        this.definition = definition;
    }
}

// ...

string[] data = line.Split('=');
string word = data[0].Trim();
string definition = data[1].Trim();

Entry entry = new Entry(word, definition);
2 голосов
/ 05 августа 2010

Это также можно сделать с помощью очень простого запроса LINQ:

var definitions =
    from line in File.ReadAllLines(file)
    let parts = line.Split('=')
    select new word
        {
            Word = parts[0].Trim(),
            Definition = parts[1].Trim()
        }
1 голос
/ 05 августа 2010

Используя RegExp, вы можете действовать двумя способами, в зависимости от вашего источника ввода


Пример 1

Предполагая, что вы прочитали свой источник и сохранили одну строку в векторе или списке:

string[] input = { "abc  = tamaz feeo maa roo key gaera porla", "Xyz = gippaza eka jaguar ammaz te sanna." };

 Regex mySplit = new Regex("(\\w+)\\s*=\\s*((\\w+).*)");

 List<word> mylist = new List<word>();

 foreach (string wordDef in input)
 {
      Match myMatch = mySplit.Match(wordDef);

      word myWord;

      myWord.Word = myMatch.Groups[1].Captures[0].Value;
      myWord.Definition = myMatch.Groups[2].Captures[0].Value;

       mylist.Add(myWord);
 }

Пример 2

Предполагая, что вы прочитали свой источник в одной переменной (и любая строка заканчивается символом разрыва строки '\ n'), вы можете использовать то же регулярное выражение "(\ w +) \ s * = \ s * ((\ w +). *) "но таким образом

string inputs = "abc  = tamaz feeo maa roo, key gaera porla\r\nXyz = gippaza eka jaguar; ammaz: te sanna.";

MatchCollection myMatches = mySplit.Matches(inputs);

foreach (Match singleMatch in myMatches)
{

    word myWord;

    myWord.Word = singleMatch.Groups[1].Captures[0].Value;
    myWord.Definition = singleMatch.Groups[2].Captures[0].Value;

    mylist.Add(myWord);
}

Строки, которые соответствуют или не соответствуют регулярному выражению " (\ w +) \ s = \ s * ((\ w +). ) ":

  • "abc = tamaz feeo maa roo key gaera porla, qsdsdsqdqsd \ n" -> Match!
  • "Xyz = gippaza eka jaguar ammaz te sanna. sdq = sqds \ n" -> Match! Вы также можете вставить описание, включающее также пробелы.
  • "qsdqsd = \ nsdsdsd \ n" -> Соответствует многопоточной паре тоже !
  • "sdqsd = \ n" -> НЕ СОГЛАСОВАТЬ ! (без описания)
  • "= sdq sqdqsd. \ N" -> НЕ СОГЛАСОВАТЬ ! (не хватает слов)
0 голосов
/ 05 августа 2010
// Split at an = sign. Take at most two parts (word and definition); 
//    ignore any = signs in the definition
string[] parts = line.Split(new[] { '=' }, 2);

word w = new word();
w.Word = parts[0].Trim();

// If the definition is missing then parts.Length == 1
if (parts.Length == 1)
    w.Definition = string.Empty;
else
    w.Definition = parts[1].Trim();

words.Add(w);
0 голосов
/ 05 августа 2010

Использование регулярных выражений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...