![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с загрузкой текста из файла. [D7, WinME]
avi © (2005-01-11 18:38:00)Уважаемые мастера помогите мне плс.Для загрузки текста в Label я
использую этот код:
var f: textfile;
s: string;
i: integer;
begin
Label2.Tag := 31;
Timer1.Enabled := True;
assignfile(f,'...\questions.DAT');
reset(f);
i := 0;
s := '';
while not eof(f) do
begin
inc(i);
readln(f,s);
case i of
6: Label1.Caption := s;
7: Label1.Caption :=s;
8: Label1.Caption :=s;
9: Label1.Caption :=s;
10: Label1.Caption :=s;
end;
end;
closefile(f)
но в файле на против некоторых строчек есть знак * мне надо что бы при загрузки текста звезда не загружалась.
Зарание спасибо.
avi (2005-01-12 18:15:00) [1]Все разобралс Как сделать так что бы после нажатия на Label программа проверила есть ли в этой строке знак * и если есть то в лабел должна загрузиться 6 или 11 или 18 строка из файла.
А к стати begin...end подкинул хорошию идею как сделать так что бы после каждого запуска в Label1,Label2,Label3,Label3,Label5 загружались разные строчки причем если в Label1 загружена 1 строка в Label2 должна быть 2 в лабел3 3 и т.д. а если в лабел 1 загружена 6 строчка в лабел2 должна загрузиться 7.
avi (2005-01-12 16:46:00) [2]begin...end ©
>Это не Вы ли делаете программу "Кто хочет стать миллионером?"?
Нет, но может потом сделаю.
raidan (2005-01-12 16:36:00) [3]Не проще ли подгрузить файлик в memo, если он не слишком большой?
А потом указывайте на здоровье - 8, 9, или 15-я строчка...
MetalFan (2005-01-12 15:50:00) [4]думай avi думай! не все же тебе будут всегда расжевывать!
запомни в Tag'е label'a номер строки и грузи потом ее...
begin...end (2005-01-12 15:48:00) [5]> [20] avi (12.01.05 15:46)
Так, что-то у меня возникли подозрения.
Это не Вы ли делаете программу "Кто хочет стать миллионером?"?
avi (2005-01-12 15:46:00) [6]Я понимаю что я итак много просил но этот вопрос будит последним.
Как сделать так что бы после нажатия на Label программа проверила есть ли в этой строке знак * и если есть то в лабел должна загрузиться 6 или 11 или 18 строка из файла.
Orc (2005-01-12 08:11:00) [7]
> А откуда Вы знаете, сколько там строк? Может быть, меньше
> 9? В этом случае мой код сработает, хотя и плохо, а Ваш,
> вероятно, вызовет ошибку.
Посчитать строки в файле и все дела:
function filestr(filename:string):integer;
var
q:integer;
s:string;
f:textfile;
begin
assignfile(f,filename);
reset(f);
q:=0;
while not eof(f) do
begin
readln(f,s);
q:=q+1;
end;
closefile(f);
result:=q;
end;
begin...end (2005-01-12 08:02:00) [8]> [17] Anatoly Podgoretsky © (11.01.05 22:31)
> Нет никакой нужды присваивать значение ярлыку в цикле ,
> если используется только последнее значение.
Это я понял, и уже давно.
> Теперь то согласен?
После выполнения кода автора ветки из [0] в Label1.Caption окажется либо последняя строка файла (если количество строк там меньше 10), либо 10-я строка (если количество строк там больше или равно 10).
Поэтому с последним вариантом Вашего кода ([17], вторая часть) я согласен.
Anatoly Podgoretsky (2005-01-11 22:31:00) [9]fА вот отсюда
while not eof(f) do
begin
inc(i);
readln(f,s);
case i of
6: Label1.Caption := s;
7: Label1.Caption :=s;
8: Label1.Caption :=s;
9: Label1.Caption :=s;
10: Label1.Caption :=s;
end;
end;
closefile(f)
Первые 9 строк читаются вхолостую, действует результат чтения только последней 10 строки, затем файл закрывается.
Или ты имеешь в виду, что его код занимается подсчетом количества строк?
Тогда так
while not EOF(F) do
begin
Inc(I);
ReadLn(S);
if I = 10 Break;
end;
Label1.Caption := StringReplaces(S, '*', '', [rfReplaceAll])
Нет никакой нужды присваивать значение ярлыку в цикле , если используется только последнее значение. Вот теперь сработает при количестве строк от 0 до бесконечности и будет только одно присваивание, ьещ использования ненужного сдесь множества.
Теперь то согласен?
begin...end (2005-01-11 21:23:00) [10]> [15] Anatoly Podgoretsky © (11.01.05 21:15)
> for I := 1 to 9 do RealLn(F);
> ReadLn(F, S);
А откуда Вы знаете, сколько там строк? Может быть, меньше 9? В этом случае мой код сработает, хотя и плохо, а Ваш, вероятно, вызовет ошибку.
Anatoly Podgoretsky (2005-01-11 21:15:00) [11]begin...end © (11.01.05 18:44) [4]
то тоже плохой код!
for I := 1 to 9 do RealLn(F);
ReadLn(F, S);
Label1.Caption := StringReplace(S, '*', '', [rfReplaceAll])
Alexander Panov (2005-01-11 19:03:00) [12]avi (11.01.05 18:56) [12]
если ReadLn(s) заменить на ReadLn(s); то всё работает.
Супер-)
avi (2005-01-11 18:58:00) [13]Всё работает, огромное спасибо тем кто помог.
avi (2005-01-11 18:56:00) [14]если ReadLn(s) заменить на ReadLn(s); то всё работает.
begin...end (2005-01-11 18:55:00) [15]> [9] avi (11.01.05 18:53)
ReadLn(F, S), извините.
Ega23 (2005-01-11 18:55:00) [16]ReadLn(F,s)
avi (2005-01-11 18:53:00) [17]Сново ошибка на этот раз рунается на ReadLn(s) и пишет I/O error 104.
avi (2005-01-11 18:50:00) [18]Огромное Всем спасибо!
begin...end (2005-01-11 18:47:00) [19]> [4] begin...end © (11.01.05 18:44)
Я опечатался: вместо StringReplaces нужно StringReplace.
olookin (2005-01-11 18:47:00) [20][5] avi (11.01.05 18:46)
Значит, StringReplace, я вечно путаю...