Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 17:13   #1
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию Файлы и строки.

Добрый день.

Есть текстовый файл, который содержит множество вопросов и ответов на них. Данные имеют следующий вид:

# номер вопроса
& сам вопрос
$ответ на вопрос
#номер вопроса
&сам вопрос
$ответ на вопрос
_____________________________
номера вопросов начинаются с #
вопросы начинаются с &
ответы начинаются с $
_____________________________
Подскажите, пожалуйста, как можно организовать чтение из этого файла и присвоение этих данных переменным.

Вот моя попытка реализовать эту задачу:

Код:
var 
   dataArray : array[1..N, 1..N, 1..N] of string;

{ N получаем прочитав файл и узнав количество вопросов. 

первый столбец матрицы содержит номер вопроса
второй столбец матрицы содержит тело вопроса
третий столбец матрицы содержит ответ}

   fp : textfile;
   st : string;
   i   : integer;
begin
AssignFile(fp, 'datafile.txt');
Reset(fp);
while not eof(fp) do
   begin
      Read(fp, st);
      for i := 1 to N do
         for j := 1 to N do
            for k := 1 to N do 
             begin
                if st[0] = '#'
                   then
                     begin
                        // прочитать все данные после #
                        // dataArray[i, j, k]  := ...
                     end;
                 if st[0] = '&'
                    then
                      begin
                        // прочитать все данные после &
                        // dataArray[i, j, k]  := ...
                      end;
                 if st[0] = '&'
                     then
                       begin
                        // прочитать все данные после $
                        // dataArray[i, j, k] := ...
                       end;
             end;
end;
...think about your actions.

Последний раз редактировалось Stilet; 01.12.2010 в 17:27.
lastalert вне форума Ответить с цитированием
Старый 01.12.2010, 17:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вопрос на засыпку - почему не хочешь сделать все типизированными файлами?
Они ведь как раз для такого предназначены.
А текстовые еще парсить нужно, да не ошибиться... Морока.
при типизации мало того что надежность повышается так еще и работать с ними проще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2010, 17:39   #3
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию

Stilet, а как можно сделать с пом. типизированных файлов?
я просто не силен в паскале и не знаю как сделать что-то на подобии ассоциативного массива.

Код:
array(
          questionNumber[0] => array (
                                                   1 => Question
                                                   2 => Answer 
                                          ),
          questionNumber[1] => array (
                                                   1 => Question
                                                   2 => Answer 
                                         )
)
и т.д.
...think about your actions.

Последний раз редактировалось lastalert; 01.12.2010 в 17:42.
lastalert вне форума Ответить с цитированием
Старый 01.12.2010, 18:37   #4
NoSilence
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 15
По умолчанию

Код:
var
  Questions: integer;
  Question: array of record
    Index: integer;
    Text, Answer: string;
  end;

function LoadQuestionsFile(FileName: string):integer;
var
  i: integer;
begin
Questions:= 0;
SetLength(Question, 0);
with TStringList.Create do
  try
    LoadFromFile(FileName);
    for i:= 0 to Count-1 do begin
      if Strings[i] = '' then continue;
      if Strings[i][1] = '#' then begin
        Inc(Questions);
        SetLength(Question, Questions);
        Question[Questions-1].Index:= StrToInt(Copy(Strings[i], 2, Length(Strings[i])));
      end else if Strings[i][1] = '&' then
        Question[Questions-1].Text:= Copy(Strings[i], 2, Length(Strings[i]))
      else if Strings[i][1] = '$' then
        Question[Questions-1].Answer:= Copy(Strings[i], 2, Length(Strings[i]));
    end;
  finally
    Free;
  end;
result:= Questions;
end;
так я полагаю?

Последний раз редактировалось NoSilence; 01.12.2010 в 18:53.
NoSilence вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строки и файлы marina_sergina Помощь студентам 0 15.05.2010 14:13
строки и файлы в с++ LovingDaisy Общие вопросы C/C++ 2 21.01.2010 00:20
Строки и файлы BR@BUS Общие вопросы Delphi 5 08.04.2008 23:54