Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизПомогите с загрузкой текста из файла. Найти похожие ветки
← →
avi (2005-01-11 18:38) [0]Уважаемые мастера помогите мне плс.Для загрузки текста в 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)
но в файле на против некоторых строчек есть знак * мне надо что бы при загрузки текста звезда не загружалась.
Зарание спасибо.
← →
begin...end © (2005-01-11 18:40) [1]> avi (11.01.05 18:38)
> использую этот код
Плохой код.
← →
avi (2005-01-11 18:42) [2]Да а что вы можите преложить?
← →
olookin © (2005-01-11 18:43) [3]s:=ReplaceString(s,"*","",[rfReplaceAll]);
← →
begin...end © (2005-01-11 18:44) [4]> [2] avi (11.01.05 18:42)
while not EOF(F) do
begin
Inc(I);
ReadLn(S);
if I in [6..10] then
Label1.Caption := StringReplaces(S, "*", "", [rfReplaceAll])
end
← →
avi (2005-01-11 18:46) [5]Уважаемый olokin вставил ваш код и Delphi Выдал ошибку;
Undeclared identifier: "ReplaceString"
← →
olookin © (2005-01-11 18:47) [6][5] avi (11.01.05 18:46)
Значит, StringReplace, я вечно путаю...
← →
begin...end © (2005-01-11 18:47) [7]> [4] begin...end © (11.01.05 18:44)
Я опечатался: вместо StringReplaces нужно StringReplace.
← →
avi (2005-01-11 18:50) [8]Огромное Всем спасибо!
← →
avi (2005-01-11 18:53) [9]Сново ошибка на этот раз рунается на ReadLn(s) и пишет I/O error 104.
← →
Ega23 © (2005-01-11 18:55) [10]ReadLn(F,s)
← →
begin...end © (2005-01-11 18:55) [11]> [9] avi (11.01.05 18:53)
ReadLn(F, S), извините.
← →
avi (2005-01-11 18:56) [12]если ReadLn(s) заменить на ReadLn(s); то всё работает.
← →
avi (2005-01-11 18:58) [13]Всё работает, огромное спасибо тем кто помог.
← →
Alexander Panov © (2005-01-11 19:03) [14]avi (11.01.05 18:56) [12]
если ReadLn(s) заменить на ReadLn(s); то всё работает.
Супер-)
← →
Anatoly Podgoretsky © (2005-01-11 21:15) [15]begin...end © (11.01.05 18:44) [4]
то тоже плохой код!for I := 1 to 9 do RealLn(F);
ReadLn(F, S);
Label1.Caption := StringReplace(S, "*", "", [rfReplaceAll])
← →
begin...end © (2005-01-11 21:23) [16]> [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 22:31) [17]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-12 08:02) [18]> [17] Anatoly Podgoretsky © (11.01.05 22:31)
> Нет никакой нужды присваивать значение ярлыку в цикле ,
> если используется только последнее значение.
Это я понял, и уже давно.
> Теперь то согласен?
После выполнения кода автора ветки из [0] в Label1.Caption окажется либо последняя строка файла (если количество строк там меньше 10), либо 10-я строка (если количество строк там больше или равно 10).
Поэтому с последним вариантом Вашего кода ([17], вторая часть) я согласен.
← →
Orc © (2005-01-12 08:11) [19]
> А откуда Вы знаете, сколько там строк? Может быть, меньше
> 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;
← →
avi (2005-01-12 15:46) [20]Я понимаю что я итак много просил но этот вопрос будит последним.
Как сделать так что бы после нажатия на Label программа проверила есть ли в этой строке знак * и если есть то в лабел должна загрузиться 6 или 11 или 18 строка из файла.
← →
begin...end © (2005-01-12 15:48) [21]> [20] avi (12.01.05 15:46)
Так, что-то у меня возникли подозрения.
Это не Вы ли делаете программу "Кто хочет стать миллионером?"?
← →
MetalFan © (2005-01-12 15:50) [22]думай avi думай! не все же тебе будут всегда расжевывать!
запомни в Tag"е label"a номер строки и грузи потом ее...
← →
raidan © (2005-01-12 16:36) [23]Не проще ли подгрузить файлик в memo, если он не слишком большой?
А потом указывайте на здоровье - 8, 9, или 15-я строчка...
← →
avi (2005-01-12 16:46) [24]begin...end ©
>Это не Вы ли делаете программу "Кто хочет стать миллионером?"?
Нет, но может потом сделаю.
← →
avi (2005-01-12 18:15) [25]Все разобралс Как сделать так что бы после нажатия на Label программа проверила есть ли в этой строке знак * и если есть то в лабел должна загрузиться 6 или 11 или 18 строка из файла.
А к стати begin...end подкинул хорошию идею как сделать так что бы после каждого запуска в Label1,Label2,Label3,Label3,Label5 загружались разные строчки причем если в Label1 загружена 1 строка в Label2 должна быть 2 в лабел3 3 и т.д. а если в лабел 1 загружена 6 строчка в лабел2 должна загрузиться 7.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c