Извлечение десятичных / целочисленных значений перед последовательностью символов в C # - PullRequest
0 голосов
/ 16 октября 2019

Я хочу извлечь все десятичные / целочисленные значения перед последовательностью символов (am / AM), пока не появится значение в алфавите или специальном символе

    Input                                          Output 
    PEK\n2545 AMAzerbhaijan                        2545
    PEK\n2545 AMamorphous                          2545
    ANGwwquui\3.0 amAm                             3.0
    Awyu&&@^/Non-Prog//@*(*889/328.19 am ->        328.19
    qii2781a/k28U28am                              28
    PEK\nam2545 AM                                 2545

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

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Учитывая примеры, которые вы показали, я считаю, что это поможет:

        public string ParseData(string input)
        {
            StringBuilder numberBuilder = new StringBuilder();
            string terminatorChars = "am";
            bool isCaseSensitive = false;

            int terminatorCharLength = terminatorChars.Length;

            for (int i = 0; i < input.Length; i++)
            {
                if (input.Length - i >= terminatorCharLength)
                {
                    var currentSubstr = input.Substring(i, terminatorCharLength);
                    if ((currentSubstr == terminatorChars) || (!isCaseSensitive && currentSubstr.ToLowerInvariant() == terminatorChars.ToLowerInvariant()))
                        if(numberBuilder.Length>0)
                            return numberBuilder.ToString();
                }

                if (Char.IsDigit(input[i]) || input[i] == '.')
                    numberBuilder.Append(input[i]);
                else if (Char.IsWhiteSpace(input[i]))
                    continue;
                else
                    numberBuilder.Clear();
            }

            return null;
        }
0 голосов
/ 16 октября 2019

Данные представляют собой данные фиксированной ширины с именем первые 50 символов и значением данных после столбца 50. См. Код ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(FILENAME);

            string line = "";
            List<KeyValuePair<string, decimal>> data = new List<KeyValuePair<string,decimal>>();

            int lineNumber = 0;
            while((line = reader.ReadLine()) != null)
            {
                if(++lineNumber > 1)
                {
                    string key = line.Substring(0, 50).Trim();
                    decimal value = decimal.Parse(line.Substring(50));
                    data.Add(new KeyValuePair<string,decimal>(key,value));
                }
            }
        }
    }

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