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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 12:12   #1
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию загрузка теста через memo.

Всем привет! У меня такая проблема:

Имеется файл теста с примерно таким содержанием:
Код:
тест                    //это тема
Сейчас вам будут предложены вопросы по теме "тест". Постарайтесь отвечать на них
не спеша и верно, т.к. времени на сдачу теста состовляет "3" минут. Желаем Удачи!
-------
Нажмите "ОК".  // инструкция
.                   //разделитель
*
1                   //время
!
пароль             //пароль=)
Вопрос1         //вопрос
.                   //разделитель
ответ1          //ответ
,0               {запятая означает что это не последний ответ а 0 то что ответ не верен}
ответ1
,0
ответ1
.1             {точка означает конец теста, а 1 ответ верен
Вопрос2
.
ответ2
,1
ответ2
,0
ответ2
.0
Итак, мне нужно что бы нормально выводилась инструкция до точки.
Тема выводится нормально, но с инструкцией пошла беда. Вместо отдельного участка текста выводит весь текст а точку просто стирает=(

в чем ошибка? Может есть какие нибудь советы на будущее?=)

Код:
//это вносит текст из файла теста в memo1
AssignFile (f, edit1.Text);
   Reset (f);
   s:='';
   repeat
   readln (f, s);
   memo1.Lines.Add(s)
   until eof(f);
...............................
   Form1.Caption := memo1.Lines.Strings[0]; //выводит название
   buf:='';
{это все должно выводить инструкцию...зараза этакая...не хотит...}
   for i:=1 to Memo1.Lines.Count-1 do

     begin
      if memo1.Lines.Strings[i] <> '.'  then
      begin
       buf := buf+memo1.Lines.Strings[i]+#13;
      end;
      If memo1.Lines.Strings[i] = '.'  then
      Application.ProcessMessages;

    end;

   Label6.caption:=buf;
   Label6.Visible:=true;
Хелп ми плииз!=) Заранее спасибо!=)
Drakulov вне форума Ответить с цитированием
Старый 07.03.2010, 15:45   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TStringList;
  I : Integer;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile(Edit1.Text);
    Memo1.Lines.Clear;
    for I := 0 to SL.Count-1 do begin
      Memo1.Lines.Add(SL[I]);
      if (SL[I] <> '') and (SL[I][1] = '.') then begin
        Memo1.Lines.Delete(Memo1.Lines.Count-1);
        break
      end;
    end;  
  finally
    SL.Free
  end;
end;
Скандербег вне форума Ответить с цитированием
Старый 07.03.2010, 16:22   #3
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Ага спасибо! А можно как-нибудь сделать, чтобы SL загружал строки из memo1? я просто файл текстовой хочу потом зашифровать=)

з.ы. разобрался=)
Код:
 For i:=0 to Memo1.Lines.Count-1 do
    begin
    SL.Add(Memo1.Lines.Strings[i]);
     end;
     i:=0;

Последний раз редактировалось Drakulov; 07.03.2010 в 16:40.
Drakulov вне форума Ответить с цитированием
Старый 07.03.2010, 16:46   #4
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Так проще:
Код:
 SL.Text := Memo1.Lines.Text;
Скандербег вне форума Ответить с цитированием
Старый 07.03.2010, 17:21   #5
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Ага спс=) Ну я так оставил, уже лень изменять=)
Так. С временем и паролем я по аналогии сделал. Читает.
Далее. Возникла трудность при чтении вопроса.
Вопрос может состоять из несколько строк собственно как и ответы.
Пытался по аналогии, получается ерунда...вернее ничего не получается...Как тут быть?
Drakulov вне форума Ответить с цитированием
Старый 07.03.2010, 17:47   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Все было бы ничего, если бы было понятно где, когда и в каком виде должны появляться вопросы и ответы.
Что за прихоть такая разделять логические куски теста точками? Хотя, конечно, точки тоже "люди".
Как вариант: при сканировании строк в SL надо считать количество встретившихся точек, которые расположены вначале строки (если нельзя вставить в текст более "говорящие" разделители). Первая точка отделяет заголовок теста, вторая вопрос №1, третья вопрос №2..., и т.д.
Скандербег вне форума Ответить с цитированием
Старый 07.03.2010, 18:40   #7
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

З.ы. вот как организовал считывание времени и пароля:

Код:
   //////////////
   ////////////
   //время /////
   ///////////
   /////////////
  SL := TStringList.Create;
     try
    For i:=0 to Memo1.Lines.Count-1 do
    begin
    SL.Add(Memo1.Lines.Strings[i]);
    end;
     i:=0;
    for I := 0 to SL.Count-1 do begin
      if (SL[i][1] = '*') THEN

      buf:=buf+SL[i+1];

      if (SL[i][1] = '!') then begin
       break;
        Memo1.Lines.Delete(Memo1.Lines.Count);
       //Memo1.Lines.Delete(Memo1.Lines.Count-1);
      end;
    end;
  finally
    SL.Free
     end;
   time:=strtoint(buf);

   buf:='';
 // // // // // // // // ////
// // // //пароль// // // //
// // // // // // // // ///
  SL := TStringList.Create;
     try
    For i:=0 to Memo1.Lines.Count-1 do
    begin
    SL.Add(Memo1.Lines.Strings[i]);
    end;
     i:=0;
    for I := 0 to SL.Count-1 do begin
      if (SL[i][1] = '!') THEN
      buf:=buf+SL[i+1];
      end;
      pass:=buf;
  finally
    SL.Free
     end;
   buf:='';
end;
вот как пытался сделать вопрос:

Код:
    // прочитать вопрос
  SL := TStringList.Create;
   try
    For i:=0 to Memo1.Lines.Count-1 do
    begin
    SL.Add(Memo1.Lines.Strings[i]);
    end;
     i:=0;
     u:=0;
    for I := 0 to SL.Count-1 do begin
      if (SL[i][1] = '!') THEN
      begin
      For u:=i+1 to SL.Count-1 do begin
      buf:=buf+SL[u]+#13;
      if (SL[u][1] = '.') or (s[u] ='\') then begin
       break;
        Memo1.Lines.Delete(Memo1.Lines.Count);
      Label5.caption:=buf
   end;
   end;
   end;
   end;
  finally
    SL.Free
     end;
Не получается...в чем юмор?

Последний раз редактировалось Drakulov; 07.03.2010 в 20:25.
Drakulov вне форума Ответить с цитированием
Старый 07.03.2010, 18:46   #8
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Как вариант: при сканировании строк в SL надо считать количество встретившихся точек, которые расположены вначале строки (если нельзя вставить в текст более "говорящие" разделители). Первая точка отделяет заголовок теста, вторая вопрос №1, третья вопрос №2..., и т.д.
Дело в том что количество точек я заранее не знаю. т.е. текст теста может состоять из большого количества вопросов. Это все делает пользователь через специальную программу "Создатель тестов" (Которую я с горем пополам, но сделал...эх...теперь вот маюсь над этим запуском тестов=)) хотя можно ведь взять это количество через цикл repeat так?
Drakulov вне форума Ответить с цитированием
Старый 07.03.2010, 20:23   #9
Drakulov
Пользователь
 
Аватар для Drakulov
 
Регистрация: 02.04.2009
Сообщений: 40
По умолчанию

Зачем тему то перенесли?
Drakulov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка кода через интернет xGroupers Общие вопросы Delphi 6 21.05.2011 01:05
Загрузка изображения через com-порт maks448 Общие вопросы Delphi 4 21.04.2009 07:06
Загрузка .ico на image через Resource delphin100 Мультимедиа в Delphi 6 28.01.2009 18:44
загрузка стиля через js Bosco JavaScript, Ajax 4 28.07.2008 11:56
загрузка страницы через iframe Vento JavaScript, Ajax 6 25.07.2008 17:10