Извлечение текста из текстового файла путем его анализа с использованием C # - PullRequest
0 голосов
/ 08 апреля 2011

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

В этих данных у меня есть телефонные номера, которые я хочу извлечь и поместить в новый текстовый файл.

Числа в файлеэто все, что меня волнует.

Мне было интересно, есть ли в C # или VB метод для этого?

Мне известно, что у IBM есть программный пакет под названием Omnifind для анализа данных, однакохотел написать приложение, которое просто выполняет вышеупомянутую тему.

PS Пример данных -

John Smith London 123456 
Hayley Smith Manchester 234567 
Mike Smith Birmingham 345678

Итак, я хочу создать новый файл, который имеет -

123456 
234567 
345678

Ответы [ 3 ]

3 голосов
/ 08 апреля 2011

Не повезло - такого метода нет.Я бы предложил что-то подобное -

List<string> result = new List<string>();
      using(StreamReader content = File.OpenText("text"))
      {
        while(!content.EndOfStream)
        {
          string line = content.ReadLine();
          var substrings = line.Split(' ');
          result.Add(substrings[substrings.Length-1]);
        }
      }
1 голос
/ 08 апреля 2011

Попробуйте это

using System.IO;
using System.Text.RegularExpressions;
public List<string> NaiveExtractor(string path)
{
    return 
    File.ReadAllLines(path)
        .Select(l => Regex.Replace(l, @"[^\d]", ""))
        .Where(s => s.Length > 0)
        .ToList();
}

Как следует из названия, это наивно и будет вытаскивать номера в именах, а если в строке два номера, они объединяются.

1 голос
/ 08 апреля 2011

Ну, вы могли бы использовать что-то вроде регулярных выражений или в этом случае вы могли бы просто сделать некоторые базовые манипуляции со строками:

using (StreamReader reader = new StreamReader("infile.txt"))
{
    using (StreamWriter writer = new StreamWriter("outfile.txt"))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            int index = line.LastIndexOf(' ');
            if (index > 0 && index + 1 < line.Length)
            {
                writer.WriteLine(line.Substring(index + 1));
            }
        }
    }
}
...