Как мне прочитать текст из файла с изменяющимися строками?

#bash #sed

#удар #сед

Вопрос:

У меня есть этот файл с вопросами и возможными ответами.

 1.- question number 1 a) option number a1 b) option number b1 c) option number c1 d) option  number d1 2.- question number 2 a) option number a2 b) option number b2 c) option number c2 d) option number d2  

Я сделал это, чтобы прочитать вопросы и ответы, и это хорошо работает, если в файле есть только один вопрос и каждый параметр находится в одной строке. Если в файле несколько вопросов, параметры находятся в одной строке или параметры больше одной строки, это работает неправильно.

 for question in 1. 2. do  q=$(sed -n -e "/^$question/p" "file") a=$(sed -n -e "/^a)/p" "file") b=$(sed -n -e "/^b)/p" "file") c=$(sed -n -e "/^c)/p" "file") d=$(sed -n -e "/^d)/p" "file") ... done  

Большое спасибо

Комментарии:

1. Вы, конечно, не используете sed для извлечения одной строки за раз. Используйте язык с лучшей поддержкой чтения из файла по одной строке за раз и структуры данных для хранения прочитанного.

2. Я бы просто последовательно прочитал файл и создал массив вопросов и их вариантов, так что это работает с любым количеством вопросов и любым количеством вариантов. Поэтому вам нужно подумать о : (1) Как именно должна выглядеть структура данных, в которой будут храниться вопросы и варианты? (2) Как извлечь соответствующую информацию из считываемой строки? и, может быть (хотя это тривиально): (3) Как последовательно читать файл?

3. Конечно, это заставляет меня задаться вопросом, почему вы хотите использовать bash для такого типа задач, поскольку bash не особенно подходит для моделирования структур данных.

4. Какой язык вы бы порекомендовали? Я новичок в программировании

5. Вам нужно проанализировать входные данные. Если вы хотите, чтобы ввод был гибким (например, вы разрешаете несколько ответов в одной строке вместо того, чтобы требовать, чтобы ввод был отформатирован с одним ответом на строку), то это намного сложнее. Если вы определяете формат ввода, то вам придется реализовать синтаксический анализатор.