Можно ли получить символы строки после указанной строки из текстового файла в C # - PullRequest
0 голосов
/ 22 апреля 2019

Это мой текстовый файл.

john monday 500 sara monday 600 sunny monday 1200 john monday 500 sara monday 300 sunny monday 2200 john monday 400 sara monday 100 sunny monday 500 john monday 520 sara monday 600 sunny monday 10 john monday 990 sara monday 850 sunny monday 1000 john monday 300 sara monday 200 sunny monday 

. Есть ли способ прочитать данные и сохранить их в виде строки, которая идет после имени SARA , например, из вышеуказанного текстового файла?мне нужны только цифры, которые идут после имени SARA , SUBSTRING не помогает, потому что я должен указать местоположение номеров там.Не знаю, как с этим справиться, я сделал Google сейчас около часа

пожалуйста, не смейтесь над моей попыткой: (* ​​1012 *

using (StreamReader readtext = new StreamReader("F:\\spokeo\\2.txt"))
     {
                string readMeText = readtext.ReadLine();
                Console.WriteLine(readMeText);

                int index1 = Convert.ToInt32(readMeText.IndexOf('SARA', 0));


                Console.WriteLine("The Index Value of character 'SARA' " +
                                  "with start index 0 is " + index1);

            }

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Регулярные выражения могут помочь в этом требовании.Вы можете определить шаблон поиска с помощью регулярных выражений, и библиотека найдет все результаты, соответствующие шаблону.Ниже код находит числа, идущие после имени "sara".

using System;
using System.Text.RegularExpressions;

namespace consoleapp
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "john monday 500 sara monday 600 sunny monday 1200 john monday 500 sara monday 300 sunny monday 2200 john monday 400 sara monday 100 sunny monday 500 john monday 520 sara monday 600 sunny monday 10 john monday 990 sara monday 850 sunny monday 1000 john monday 300 sara monday 200 sunny monday";
            var saraPattern = new Regex(@"sara\s\w+\s\d+");
            var numberPattern = new Regex(@"[\d\.\,]+");
            var matches = saraPattern.Matches(text);
            foreach (Match match in matches)
            {
                var numbermatch = numberPattern.Match(match.Value);
                var number = float.Parse(numbermatch.Value);
                Console.WriteLine(number);
            }
            Console.ReadKey();
        }
    }
}

Что касается объяснения шаблонов:

saraPattern (sara\s\w+\s\d+) гласит: findпоследовательность символов, которая начинается с "sara", затем следует пробел (\s), затем один или несколько символов слова (\w+), затем снова пробел (\s), затем одинили более десятичных символов (\ d +)

В этом шаблоне будут найдены последовательности типа «sara monday 600»

numberPattern ([\d\.\,]+), которые: находят последовательность символовкоторый содержит один или несколько из следующих символов: десятичный (\d) или запятая (\,) или точка (\.)

Этот шаблон извлечет числа (например, 600) из ранее найденныхпоследовательность (например, "sara monday 600")

Вы можете изучить регулярные выражения в Википедии (https://en.wikipedia.org/wiki/Regular_expression) или вы можете следовать базовому учебнику на этом сайте: https://regexone.com/

0 голосов
/ 22 апреля 2019

В вашем коде есть ошибка.

Эта ваша строка:

int index1 = Convert.ToInt32 (readMeText.IndexOf ('SARA', 0));

должно быть:

int index1 = Convert.ToInt32 (readMeText.IndexOf ("sara", 0));

Комментарии: 1. Вы должны использовать "(цитаты), а не'(апостроф) 2. У вас нет "SARA" в вашей строке, но есть "sara", поэтому вы получаете индекс с -1 на данный момент.

Пожалуйста, дайте мне знать, если это поможет вам!

...