5 / 5 / 0
Регистрация: 10.05.2018
Сообщений: 45
1

Считывание из файла следующей строки после вхождения символа

22.07.2018, 10:19. Показов 1022. Ответов 4

Есть ascii файл:
blabla
...
~Curve
#blabla
DT : acoustic
GK : gamma
...
blabla

Мне нужно считать в массив DT и GK..Вместо них могут быть другие символы, главное условие, что они идут после "~C" (может быть как ~C, так и ~Curve, и даже ~curve information) и после строк, начинающихся с #, если они есть.
Пробовал использовать методы File. и steamreader, нашел через indexOf("~C") положение в тексте, но как после этого начать проверку наличия # со следующей строки и запись в массив, если # нет - не пойму. Подскажите плз..
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2018, 10:19
Ответы с готовыми решениями:

Отсечь часть строки после вхождения символа/строки
string file = File.ReadAstring _file = File.ReadAllLines(_fileName); Такое вхождение...

Разделение строки s на две части: до первого вхождения символа t и после него
Назначение: разделение строки s на две части: до первого вхождения символа t и после него ...

Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0
Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0.

Ввод строки S и символа С. Результат: число повторений символа С и порядковые позиции вхождения этого символа в строку
Нужно составить программу, в которой пользователь вводит вручную строку S и символ C. Результатом...

4
807 / 556 / 238
Регистрация: 01.07.2018
Сообщений: 1,813
22.07.2018, 11:29 2
Для двух значений после искомого текста:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    using (var reader = new StreamReader("test.txt"))
            {
               string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.StartsWith("~C") || line.StartsWith("#"))
                    {
                        Console.WriteLine(reader.ReadLine());
                        Console.WriteLine(reader.ReadLine());
                        
                        Console.ReadKey();
                    }
                }
            }
1
5 / 5 / 0
Регистрация: 10.05.2018
Сообщений: 45
22.07.2018, 12:48  [ТС] 3
Спасибо! Единственное, что # может встречаться и до ~C, а мне нужен именно блок значений после ~C и после #
Сделал на основе предложенного варианта вот так.. наверное коряво, с точки зрения красоты кода, если кому не лень просмотреть и сказать, как сделать грамотнее - был бы очень признателен

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
StreamReader reader = new StreamReader(wellPath);
            int counter = 0;
            int numLine = 1;
            string line;
            string curve = "~C";
            string hash = "#";
            bool curveFinded = false;
            while ((line = reader.ReadLine()) != null )
                {
                    counter++;
                    if (line.StartsWith(curve))
                    {
                    curveFinded = true;
                    numLine = counter;
                    continue;
                    }
                    if (curveFinded && line.StartsWith(hash) && ((counter - numLine)==1))
                    { numLine++; continue;  }
                    else
                        if (curveFinded)
                        { break; }
                        else
                        { continue; }
                 }
            return (line);
0
807 / 556 / 238
Регистрация: 01.07.2018
Сообщений: 1,813
22.07.2018, 14:12 4
Две строки после строки начинающейся с "~" и после строки начинающейся с "#". Если я правильно понял. конечно. То вот:
C#
1
2
3
4
5
6
7
8
9
 string myfile = File.ReadAllText("test.txt");
            Regex patternt = new Regex(@"~.*\n#.*\n(.*)\n(.*)");
            MatchCollection matches = patternt.Matches(myfile);
            foreach (Match match in matches)
            {
                Console.WriteLine(match.Groups[1].Value);
                Console.WriteLine(match.Groups[2].Value);
 
            }
1
5 / 5 / 0
Регистрация: 10.05.2018
Сообщений: 45
22.07.2018, 14:19  [ТС] 5
о_О мне нужно время, чтобы переварить это) первый раз вижу Regex
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2018, 14:19
Помогаю со студенческими работами здесь

Считывание строки из файла до символа переноса строки
К примеру у меня есть текстовый файл, который содержит в себе несколько строчек символов. Мне надо...

Разделение строки на две части до первого вхождения заданного символа и после него
Функция - Parse(s,t). Назначение - разделение строки s на две части: до первого вхождения символа t...

Функция - Parse(s,t). Разделение строки s на две части: до первого вхождения символа t и после него
Функция - Parse(s,t). Разделение строки s на две части: до первого вхождения символа t и после него...

Как смоделировать матрицу условных вероятностей появления символа aj после символа ai по следующей программе
Только начал изучать Mathcad. Не могу разобраться как смоделировать матрицу условных вероятностей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru