Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
studks
0 / 0 / 1
Регистрация: 12.12.2014
Сообщений: 15
1

Чтение текстового файла до определённого символа

13.12.2014, 20:21. Просмотров 5207. Ответов 5
Метки нет (Все метки)

Ниже предоставлен код, не совсем понимаю как организовать поиск. Мне нужно вывести все вопросы, для этого я должен определить начало и конец считываемой строки.И еще нужно чтобы варианты ответов тоже куда нить записались . Конец строки это будет знак "?" начало строки - любой не пустой символ который не начинается с цифры как это реализовать внизу пример того что я хочу

дано: файл test.txt

C#
1
2
3
4
5
6
7
8
9
10
11
"Какие электроустановки?
1)белые
2)серые
3)красные
+4)зеленые
Когда я родился?
вчера
 
 
 
     где ты был?"
результатом работы программы должен вывестись в Label1.text и быть таким
C#
1
2
3
4
"
Какие электроустановки?
Когда я родился?
где ты был?"

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
s_int1 = 0;
            int i=0;
            while(i<=str.Length)
               {
                s_int1 = str.IndexOf("?");
                for (int j = 0; j <= s_int1; j++)
                {
                    label1.Text += str[j];
                }
                i = s_int1;
                i++;
               // label1.Text = Convert.ToString(s_int1);
               }
Добавлено через 1 час 12 минут
пока что дошел до такого варианта, но он пропускает вопросы и много ошибок получается, забивает лишь один вопрос:
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
public static int s_int1;
 
        public Form2()
        {
            InitializeComponent();
            FileInfo file = new FileInfo("c:\\test.txt");  // хз что это подскажите
            StreamReader streamReader = new StreamReader("c:\\test.txt", Encoding.Default); //Открываем файл для чтения Encoding.Default - кодировка файла
            string str = ""; //Объявляем переменную, в которую будем записывать текст из файла
 
            while (!streamReader.EndOfStream) //Цикл длиться пока не будет достигнут конец файла
            {
               // str += streamReader.ReadLine(); //В переменную str по строчно записываем содержимое файла    /r/n - перевод на новую строку
               string s_line=streamReader.ReadLine();
                if(s_line.IndexOf("?")!=-1) //.IndexOf("?")==1) //поиск по ?
                {
                    label1.Text = s_line;   // запись найденной строки со знаком ?
 
                }
                
                else if(s_line.Count(c => c>='0' && c<='9')>=1)
                {
                    checkedListBox1.Items.Add(s_line);
                }
            }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2014, 20:21
Ответы с готовыми решениями:

Чтение текстового файла
Здравствуйте. Есть задача. Открыть текстовый файл и достать оттуда пары разделенные символом...

Чтение текстового файла
Кто-нибудь подскажите Например так C:\1.txt там когда нажимаешь button1 и он сразу открыл и там...

Чтение из текстового файла
Добрый день, помогите ребята, как сделать так чтоб программа вычитывал данные из текстового файла,...

Чтение текстового файла
Пишет что файл не найден, хотя он находится в папке проекта, пробовал перекидывать на диск С и...

Чтение текстового файла
Здравствуйте! У меня такой вопрос... Пожалуйста, подскажите...:) Необходимо сказать сколько абзацев...

5
tezaurismosis
Администратор
Эксперт .NET
8635 / 3922 / 731
Регистрация: 17.04.2012
Сообщений: 8,700
Записей в блоге: 14
13.12.2014, 21:21 2
Для примера использовал такой тест
Кликните здесь для просмотра всего текста
Код
Учитывая механизм перелома пяточной кости, назовите нередко сопутствующие повреждения?
1) перелом голени;
2) разрыв связок коленного сустава;
3) перелом позвоночника;
4) перелом шейки бедра;
5) перелом надколенника.
Отметьте основное показание к оперативному методу лечения переломов лодыжек?
1) значительная степень смещения отломков;
2) наличие чрезсиндесмозного перелома;
3) невправимость отломков после 2-3-кратного вправления;
4) интерпозиция тканей между отломками;
5) невозможность удержать отломки после вправления.
Способ лечения, являющийся основным при переломе лучевой кости в типичном месте?
1) иммобилизационный (гипсовая повязка);
2) функциональный;
3) оперативный;
4) при помощи компрессионно-дистракционного аппарата;
5) иммобилизация эластичным бинтом.
Назовите абсолютное показание к оперативному лечению переломов (остеосинтез)?
1) открытые переломы;
2) переломы со смещением;
3) интерпозиция мягких тканей между отломками;
4) многооскольчатые и раздробленные переломы;
5) множественные переломы костей.

Вот так его пилил
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
26
27
28
using System;
using System.Collections.Generic;
using System.IO;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args) {
            var questions = new List<string>();
            var answers = new List<string>();
 
            using (var reader = new StreamReader(@"C:\Development\test.txt")) {
                bool inQuestion = false;
                while (!reader.EndOfStream) {
                    string line = reader.ReadLine();
                    if (inQuestion && !line.EndsWith("?")) {
                        answers.Add(line);
                    }
                    else {
                        questions.Add(line);
                        inQuestion = true;
                    }
                }
            }
        }
    }
}
0
Demitrius
21 / 12 / 10
Регистрация: 17.05.2014
Сообщений: 139
13.12.2014, 21:35 3
Я бы предложил следующее решение.
C#
1
2
3
4
5
6
7
8
9
10
11
// считываем данные из файла в массив строк text
string[] text = File.ReadAllLines("c:\\test.txt");
 
// перебираем весь массив с 1-ого значения (в массивах они начинаются с 0) до последнего (text.Length) с шагом 1 (i++ = i + 1)
for(int i = 0; i < text.Length; i++)
{
    // Если i-тая строка массива не содержит символа )
    // или содержит знак вопроса, отображаем её в label1.Text 
        if( !(text[i].Contains(")")) || text[i].Contains("?"))
        label1.Text += text[i]; 
}
0
studks
0 / 0 / 1
Регистрация: 12.12.2014
Сообщений: 15
13.12.2014, 22:52  [ТС] 4
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Вот так его пилил
И как мне Ну а если текст будет вот такого типа:

В каких электроустановках применяются диэлектрические боты?
+1. во всех электроустановках
2. в электроустановках с напряжением свыше 1000 В.
3. в электроустановках с напряжением до 1000 В.
4. в электроустановках с напряжением до 10 000 В.
Смертельно опасной величиной электрического переменного тока, протекающего через тело человека, следдует считать
+1. 100 мА
2. 60 мА
3. 40
4. 20 мА
Сколько существует групп допуска по электробезопасности?
+1. пять
2. три
3. шесть
4. четыре
какие средства защиты относятся к дополнительным изолирующим электрозащитным средствам для электроустановок до 1000 В.
+1. диэлектрические галоши, диэлектрические ковры и изолирующие подставки, изолирующие колпаки, покрытия и накладки, лестницы приставные.
2. инструмент с изолированными ручками, указатели напряжения, диэлектрические перчатки, изолирующие штанги.
3. диэлектрические боты, каски, переносныые заземляющие устройства, защитно-отключающие устройства.
за что несут персональную ответственность работники, непосредственно обслуживающие электроустановки?
0
tezaurismosis
Администратор
Эксперт .NET
8635 / 3922 / 731
Регистрация: 17.04.2012
Сообщений: 8,700
Записей в блоге: 14
13.12.2014, 23:06 5
Лучший ответ Сообщение было отмечено studks как решение

Решение

Чтобы не использовать XML, предлагаю простейшее разделение вопросов и ответов, которое видел в одной программе-тестере:
  • Вопрос начинается в вопросительного знака (?)
  • Неправильный ответ начинается с восклицательного знака (!)
  • Правильный ответ начинается с !+
Например
Код
?В противотуберкулезном учреждении  для профилактики туберкулеза среди сотрудников  необходимо иметь все перечисленное, кроме 
!отдельного гардероба и специальной одежды для персонала 
!отдельного помещения для приема пищи 
!+отдельной регистратуры
В таком случае, их легко различать и структура будет меньше подвержена ошибкам при разборе.
Для проверки, начинается ли строка с определённого символа используйте StartsWith(), каркас кода останется примерно тем же.
0
агерон
388 / 288 / 59
Регистрация: 12.10.2009
Сообщений: 1,133
13.12.2014, 23:17 6
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<Test>
  <Question id="1" value ="В противотуберкулезном учреждении  для профилактики туберкулеза среди сотрудников  необходимо иметь все перечисленное, кроме">
    <Answer id="1" value="отдельного гардероба и специальной одежды для персонала" />
    <Answer id="2" value="отдельного помещения для приема пищи" />
    <Answer id="3" value="отдельной регистратуры" right="yes"/>
  </Question> 
</Test>
0
13.12.2014, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2014, 23:17

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

Чтение текстового файла с условиями
Помогите разобраться, есть текстовый файл с номерами телефонов, нужно вывести на экран определенные...

Чтение данных из текстового файла
Добрый день! Подскажите, пожалуйста, как можно считать (из текстового файла) строку только до...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru