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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2011, 23:08   #1
glazik
Пользователь
 
Аватар для glazik
 
Регистрация: 03.03.2011
Сообщений: 80
По умолчанию чтение файла по строчно

Доброго времени суток,

Столкнулся с такой проблемой:
Код:
begin

     x:=strtoint(g1.edit1.text);
     y:=strtoint(g1.edit2.text);

     for j:=1 to x do
     begin
            assignFile(F,'c:\file.txt');
            reset(f);
            Readln(F,s);
            CloseFile(F);
            mass2[j]:=Tlabel.create(g3);
            mass2[j].parent:=g3;
            mass2[j].font.size:=20;
            mass2[j].top:=80;
            mass2[j].Width:=50;
            mass2[j].Caption:=inttostr(j)+s;
            mass2[j].top:=100+j*50;
     end;
после выполнения данного куска программы, создаются поля, но в каждом поле записана только первая строка из файла, хотя в файле имеются j строк. Добавление while not eof(f) do программа выдает ошибку i/o error 104...
glazik вне форума Ответить с цитированием
Старый 06.03.2011, 23:12   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

а когда пишеш, не вариант подумать немного головои?
просто порочти код, вернее деиствия последовательно, хотябы 2-3 цикла
и поимеш что фаил не надо асоциирывать при каждом прочтении цикла
видимо и в while not eof(f) do у тебя также было
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 06.03.2011, 23:19   #3
glazik
Пользователь
 
Аватар для glazik
 
Регистрация: 03.03.2011
Сообщений: 80
По умолчанию

да я тока 3 день программирую, опираюсь максимум на школьную программу))))) так что не судите строго.... по проще можешь написать?? А понял асиигн вынести из цикла))
glazik вне форума Ответить с цитированием
Старый 06.03.2011, 23:21   #4
Dimo4ka
Новичок
Джуниор
 
Аватар для Dimo4ka
 
Регистрация: 06.03.2011
Сообщений: 1
По умолчанию

я конеш знал делфи и паскаль похожи.... но чтоб на столько....
Dimo4ka___#
Dimo4ka вне форума Ответить с цитированием
Старый 06.03.2011, 23:24   #5
glazik
Пользователь
 
Аватар для glazik
 
Регистрация: 03.03.2011
Сообщений: 80
По умолчанию

Да, только вынести ассигн не приводит к нормальному функционированию программы...
glazik вне форума Ответить с цитированием
Старый 06.03.2011, 23:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Да, только вынести ассигн не приводит к нормальному функционированию программы...
ну и reset(f); выносите до цикла!
Это же каждый раз в цикле открывает файл на чтение (и, следовательно, читается каждый раз первая строчка файла)!

я уже молчу о том, что если в файле будет больше строк, чем X - то они просто не прочитаются, а вот если их будет меньше - то получите ошибку (Exception ) во время чтения строк, которых нет!
Не проше ли читать файл так, как положено, через while not eof(f) do ...
или, ещё лучше грузануть файл сразу в TStringList через
Код:
  TS := TStringList.Create;
  TS.LoadFromFile('c:\file.txt');
... тут делает что хотите с полученными строчками
  TS,.Free; {освобождаем занятую память}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2011, 23:46   #7
glazik
Пользователь
 
Аватар для glazik
 
Регистрация: 03.03.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ещё лучше грузануть файл сразу в TStringList через
Tstringlist можно использовать в любом случае или же требуется еще что то описывать??
Если можно поподробнее, как из файла считать строку и зхаписать ее в label1 допустим, потом перейти ко второй строке и записать ее в label2 и так далее...

Последний раз редактировалось glazik; 07.03.2011 в 00:42.
glazik вне форума Ответить с цитированием
Старый 07.03.2011, 09:35   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Tstringlist можно использовать в любом случае или же требуется еще что то описывать??
разумеется, переменную типа TStringList обязательно надо описать!

Цитата:
как из файла считать строку и зхаписать ее в label1 допустим
вот, без проверки, что какого-то LabelXX отсутствует на форме (соответствующая строчка из файла просто никуда не попадёт!)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var TS : TStringList;
  i : integer;
  lb : TComponent;
begin
  {создать объект}
  TS := TStringList.Create;
  {загрузить текстовый файл в объект}
  TS.LoadFromFile('c:\file.txt');

  {цикл по всем строчкам текстового файла}
  for i:=0 to TS.Count-1 do begin
    {найдём очередной Label, куда будем писать строку}
    lb := FindComponent('Label'+IntToStr(i+1));
    {если нашли и это Label - запишем строчку}
    if (lb<>nil) and (lb is TLabel)
        then TLabel(lb).Caption := TS.Strings[i];
  end;

  FreeAndNil(TS); {освобождаем занятую память}
end;
разбирайтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл с проверкой значений в столбе по строчно... Richard123 Microsoft Office Excel 11 18.01.2011 16:08
Чтение из файла С++ Michahodrev Помощь студентам 2 18.12.2010 23:47
Чтение из файла utrnjhyfgjktjy Помощь студентам 9 30.01.2010 17:41
чтение из файла Илья500 Общие вопросы C/C++ 26 05.12.2008 00:37