Как рассчитать сумму, которая существует в 2 разных текстовых файлах - PullRequest
0 голосов
/ 21 июля 2010

У меня есть имена файлов с именем

PPD_EntryDetailRecord_07192010.txt
PPD_EntryDetailRecord_07182010.txt
PPD_EntryDetailRecord_07162010.txt

. В этом случае данные будут выглядеть как

61111111111111111111111111111 2500000000 1111111111111111111111111111111111111111 1 6111111111111 10011 * 1001111111111111111111111111111110011* 1111111111111111111111111111111111111111 1 61111111111111111111111111111 6500000,72 1111111111111111111111111111111111111111 1

Теперь я хотел бы добавить все те, которые были выделены жирным шрифтом и должны показать сумму ...

Ответы [ 3 ]

2 голосов
/ 21 июля 2010

Лучшее, что я могу из этого сделать:

int start = "61111111111111111111111111111".Length + 1;
int length = "2500000000".Length;


string[] lines = System.IO.File.ReadAllLines(filename);
foreach(string line in lines)
{
  string data = line.SubString(start, length);
  double number = double.parse(data, CultureInfo.InvariantCulture);
  // sum it
}
0 голосов
/ 21 июля 2010

Случай 1:

Числа могут иметь переменное количество цифр, но не могут начинаться или заканчиваться 1 цифрами.

Вы можете использовать шаблон регулярного выражения для извлечения числа из файла:

using System.Text.RegularExpressions;

double ExtractNumberFrom(string lineOfText)
{
    var regex = new Regex( @"61+(?<number>\d+?(\.\d+?)?)1+$" );

    if (regex.IsMatch(lineOfText))
    {
        var match = regex.Match(lineOfText);
        return double.Parse(match.Groups["number"].Value);
        // note: you might want some error handling for dealing with bad input!
    }
    else
    {
        return double.NaN;  // or any other form of error handling
    }
}

Это решение распознает числа с 1 цифрами в середине, но не включает 1 s в начале или в конце.


Дело 2:

Числа имеют фиксированное количество цифр и всегда начинаются с одной и той же позиции.

См. Ответ Хенка Холтермана. Идея состоит в том, чтобы просто извлечь подстроку из строки текста, которая находится в определенной позиции, используя метод string.Substring. Затем вы продолжаете анализ этой подстроки в double.

0 голосов
/ 21 июля 2010

Если после чисел, выделенных курсивом (не выделено жирным шрифтом), и в файле есть * s, вы можете получить значение, подобное этому (пример кода быстрого и грязного кода, пока вы не подтвердите вопрос):

string line = ""; // read a line from the file here
double lineValue = double.Parse(line.Split('*')[1]); // split by "*", get the second element, and parse as a double

Вы бы перебрали все строки в файле и добавили lineValue к переменной sum.

Надеюсь, это поможет.

...