Извлечение чисел из строки - PullRequest
2 голосов
/ 24 августа 2011

Я пытаюсь манипулировать строкой ..

Например:

string DiagnosesString  "250.00 03 350.0001 450.00 01 550.00 02";

выход

250.00
350.00
450.00
550.00

Я пытался использовать метод Сплита. Как вы можете видеть на моем примере в 350.0001 и его вывод составляет 350.00.

Я могу удалить 03, 02 и т. Д.

Вопрос: 1.) Как я сниму o1 с 350.0001, получу только 350.00?

вот мой код:

string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

Ответы [ 12 ]

5 голосов
/ 24 августа 2011
var DiagnosisCodesParts =
    DiagnosesString.Split(' ')
                   .Where(s => !s.StartsWith("0"))
                   .Select(s => Decimal.Parse(s))
                   .Select(d => d.ToString("0.00");
3 голосов
/ 24 августа 2011

Как насчет выполнения Decimal.TryParse и форматирования десятичных чисел.Это также отсеет плохие значения.

string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02"; 
var diagnoses = DiagnosesString.Split(' ');
foreach(var diagnosis in diagnoses)
{
  decimal temp;
  if(diagnosis.Contains(".") && Decimal.TryParse(diagnosis, out temp))
  {
    // do something
    var value = temp.ToString("0.00");
  }
}
2 голосов
/ 24 августа 2011

Вы можете разобрать их как двойные.Мне нравится использовать XmlConvert для этого:

foreach (var s in diagnosisCodesParts)
{
    var d = XmlConvert.ToDouble(s);
    Console.WriteLine(string.Format({0:2}, d));
}
2 голосов
/ 24 августа 2011

Если вы имеете дело с числовыми значениями, я бы порекомендовал разобрать их в реальные числовые типы, например, используя Decimal.Parse или Decimal.TryParse. Затем вы можете использовать форматирование, чтобы преобразовать его обратно в строку, например, myNumber.ToString("N2")

1 голос
/ 24 августа 2011

Список списка = новый список ();

       string DiagnosesString  =  "250.00 03 350.0001 450.00 01 550.00 02";

       string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");

        string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

        foreach (var item in DiagnosisCodesParts)

        {

            string[] parts = item.Split('.');
            string num = parts[1];
            string finalValue = string.Empty;

            if (num.Length > 2)
            {
                num = num.Replace(num, "00");
                finalValue =  parts[0]+"."+num;
            }
            else
            {
                finalValue = parts[0] + "." + num;
            }

            list.Add(finalValue);
        }

о / п: 250,00 350,00 450,00 550,00

1 голос
/ 24 августа 2011
using System;
using System.Text.RegularExpressions;
class Program
{
    static void Main()
    {
        string input = "250.00 03 350.0001 450.00 01 550.00 02";
        Match match = Regex.Match(input, @"[0-9]+[/.][0-9]+", RegexOptions.IgnoreCase);
        while (match.Success) 
        {
            string key = match.Value;
            Console.WriteLine(String.Format("{0:0.00}", Convert.ToDecimal(key, new CultureInfo("en-US"))));
            match = match.NextMatch();
        }
    }
}
1 голос
/ 24 августа 2011

Вам нужно будет преобразовать строку в числовое значение, я выбираю десятичную, поскольку она не теряет точность, как double или float.Затем вы можете использовать спецификатор строки формата, чтобы преобразовать его в желаемую десятичную форму:

var list = List<string>();
foreach(var s in splitString) {

  // code to rule out 02, 01, etc. goes here

  decimal tmp;
  if (decimal.TryParse(s, out tmp)) {
     var code = tmp.ToString("0.00");
     list.Add(code);
  } else {
     // something went wrong, handle it here
  }
}
1 голос
/ 24 августа 2011

Хорошо, я не уверен, что полностью понял ваш вопрос, но я попробую.

  1. Вы разделены, как вы делали раньше.
  2. Вы фильтруете / игнорируетевсе строки длиной 2 или менее.
  3. Вы преобразуете строки, оставленные в вашем массиве, в удвоенные значения.
  4. Вы округляете эти значения до 2 чисел после точки.
1 голос
/ 24 августа 2011

string DiagnosesString = "250,00 03 350,0001 450,00 01 550,00 02";

string DiagnosisCodestemp = DiagnosesString.Replace ("01", "") .Replace ("02", "") .Replace ("03", "") .Replace ("04", "") .Replace ( "05", "") .Заменить ("06", "") .Заменить ("07", "");

        string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();

        foreach (var item in DiagnosisCodesParts)

        {

            string[] parts = item.Split('.');
            string num = parts[1];
            if (num.Length > 2)
            {
                num = num.Replace(num, "00");
            }

        }
1 голос
/ 24 августа 2011

1) преобразовать строку в десятичную 2) округлить до десятичных знаков после запятой 3) преобразовать его обратно в строку

...