Делаю программу для парсинга текста из файлов. Программа для анкетирования. Суть в том что не могу написать как оно будет заносить из файла в label1,label2,label3,label4. Сам текстовый файл будет в виде:
*Что вы делаете?
$1.Работаю
&2.Играю
!3.Учусь
#
*Ваше хобби
$1.Авиамоделирование
&2.Математика
!3.Спорт
#
Вопросы обозначаются символом *, первый вопрос $, второй &, третий !. Код прилагаю. Может кто подскажет как тут грамотно порешать вопрос.
string stroka ="";
int count1 = 0;
int temp = 0;
int temp1 = 0;
int temp2 = 0;
int temp3 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
try
{
var encoding = Encoding.GetEncoding(1251);
using (var src = new StreamReader(path, encoding: encoding))
{
stroka = src.ReadToEnd();
for (int i = 0; i < stroka.Length; i++)
{
if(stroka[i]=='*')
{
temp = count1;
continue;
}
else if(count1>temp)
{
Ask.Text = string.Format(stroka[i].ToString());
}
else if(stroka[i]=='$')
{
temp1 = count2;
count2++;
continue;
}
else if(count2>temp1)
{
Question1.Text = string.Format(stroka[i].ToString());
}
else if(stroka[i]=='&')
{
temp2 = count3;
count3++;
continue;
}
else if(count3>temp2)
{
Question2.Text = string.Format(stroka[i].ToString());
}
else if(stroka[i]=='!')
{
temp3 = count4;
count4++;
continue;
}
else if(count4>temp3)
{
Question3.Text = string.Format(stroka[i].ToString());
}
}
Я пробовал разные способы. Но что то не получалось.
Если добавить этот класс:
public class QAs
{
public string Question;
public string Answer1;
public string Answer2;
public string Answer3;
static public List<QAs> ReadFromFile(string path, Encoding enc)
{
List<QAs> list = new List<QAs>();
StreamReader sr = new StreamReader(path, enc);
string line;
QAs qas = new QAs();
while ((line = sr.ReadLine()) != null)
{
if (line.Length == 0) continue;
switch (line[0])
{
case '*':
qas.Question = line.Substring(1);
break;
case '$':
qas.Answer1 = line.Substring(1);
break;
case '&':
qas.Answer2 = line.Substring(1);
break;
case '!':
qas.Answer3 = line.Substring(1);
break;
case '#':
list.Add(qas);
qas = new QAs();
break;
}
}
return list;
}
}
то список объектов , в каждом из которых будет вопрос и ответы на него можно будет получить такой строкой:
List<QAs> list=QAs.ReadFromFile("test.txt",Encoding.GetEncoding(1251));
Снимок экрана отладки - строки загрузились.
Вот вам пример разбора:
class Program
{
static void Main(string[] args)
{
// открыли файл
using (var tr = new StreamReader(@"D:\x.txt", Encoding.GetEncoding(1251)))
{
foreach (var item in ParseFile(tr)) // вывели все элементы
{
Console.WriteLine($"Вопрос: {item.Question}");
foreach (var answer in item.AnswerVariants)
Console.WriteLine($" * {answer}");
}
}
}
static IEnumerable<QuizItem> ParseFile(TextReader tr)
{
while (true)
{
var item = ParseItem(tr); // распарсили следующий элемент
if (item == null) // если конец файла, выходим
yield break;
yield return item;
}
}
static QuizItem ParseItem(TextReader tr)
{
var q = GetNext(tr, "*"); // прочитали вопрос и ответы
var a = new string[] {GetNext(tr, "$1."), GetNext(tr, "&2."), GetNext(tr, "!3.")};
if (q == null || a.Any(s => s == null)) // кончился файл - выходим
return null;
return new QuizItem(q, a); // пакуем в класс
}
static string GetNext(TextReader tr, string expectedPrefix)
{
string s; // перечитываем пока не null и начинается с #
do s = tr.ReadLine()?.Trim(); while (s != null && s.StartsWith("#"));
if (s == null) // null - конец файлв
return null;
if (!s.StartsWith(expectedPrefix)) // проверяем начало
throw new FormatException("Unexpected text in file");
return s.Substring(expectedPrefix.Length).TrimStart();
}
}
class QuizItem
{
public string Question { get; }
// по-хорошему нужно IReadOnlyCollection<string>, но для простоты просто массив
public string[] AnswerVariants { get; }
public QuizItem(string q, string[] a)
{
Question = q;
AnswerVariants = a;
}
}
Выводит:
Вопрос: Что вы делаете?
* Работаю
* Играю
* Учусь
Вопрос: Ваше хобби
* Авиамоделирование
* Математика
* Спорт
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
как узнать глубину рекурсии или как реализовать эту программу:Написать для NodeJS функцию, которая рекурсивно выводит список всех файлов и папок...
По идее должно делать плавную анимацию и при загрузке плавно появляться, но выдает ошибку, что slideDown и fadeOut не являются функцией
Коллеги доброе время сутокЗаинтересовался реализацией "js вытянуть значения ячеек Excel в переменные"
Есть переменная fileWay - это пути к загруженным файлам на сервере разделенные символом ";" тегом перевода строки пример: