Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.51 MB
Время: 0.037 c
1-1104942237
msgipss
2005-01-05 19:23
2005.01.23
timer в треде вешается, объясните чайнику


1-1104915771
WhiteGuy
2005-01-05 12:02
2005.01.23
Бантик/Батник


4-1101814088
pavel_guzhanov
2004-11-30 14:28
2005.01.23
Определение монитора с помощью WMI


3-1103197246
Сашка
2004-12-16 14:40
2005.01.23
Работа с таблицами


14-1104576205
Alex_S
2005-01-01 13:43
2005.01.23
Чудеса с Лексиконом. (История прошлого века)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский