Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Помогите с загрузкой текста из файла.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
1-1104931359
Artlav
2005-01-05 16:22
2005.01.23
ppmd компонент или dll


14-1105105961
kaif
2005-01-07 16:52
2005.01.23
Много новичков! Что бы это значило?


9-1097816409
WondeRu
2004-10-15 09:00
2005.01.23
GLSCENE: Textured HeightField


14-1105175772
Чеширский_Кот
2005-01-08 12:16
2005.01.23
Data Warehousing


1-1105040772
KriNEEDHELP
2005-01-06 22:46
2005.01.23
Pri zakritii programki ona is4ezaet iz traybara =(((