|
Вопрос # 5 594/ вопрос закрыт / |
|
Здравствуйте!
Не могу понять почему не записывает в файл, пробовал ставить условие как if strtoint(title)>50 then так и if strtoint(title)<50 then
Прикол в чем, программа берет адрес сайта из первого файла выполняет запрос к сервису, получает ответ, с текста выпарсевается значение ТИЦ сайта (число) первый сайт имеет значение 200 но, программа должна проверить это значение и если оно больше 50 то записать адрес сайта в файл. Но почему-то ничего не происходит. Значение выпарсивает тоесть строка button1.Caption:=title; меняет текст на кнопке на 200, а в файл не записывает, моежет я гдето ошибся, уже два часа долбюсь найти ошибку не могу.
Прошу помощи, заранее благодарен!
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var
- rss,rss1,title,link:WideString;
- url:string;
- f,f1,f2:Textfile;
- i:integer;
- begin
-
- assignfile(f,'c:\DleSites.txt');
- assignfile(f1,'c:\DleSites2.txt');
- Append(f1);
- assignfile(f2,'c:\Dle.txt');
- Append(f2);
- reset(f);
- //while not eof(afile) do
- // begin
- readln(f,url);
- writeln(f1,url);
- rss:=IdHTTP1.Get('http://shelkovo.org/pr-cy/?url='+url);
- i:=1;
- title:='';
- while (i<=length(rss)) do
- begin
-
- begin
-
- title:=copy(rss,1,pos('</font><br>',rss)-1);
- button1.Caption:=title;
- if strtoint(title)>50 then
- begin
- writeln(f1,url);
- write (f1,'--'+title);
-
- CloseFile(f);
- end;
- i:=0;
- end; // end;
- inc(i);
- end;
- end;
Мини-форум вопроса
Всего сообщений: 16; последнее сообщение — 23 августа 2011, 00:39; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 22 августа 2011, 16:32 [#1]:
Цитата (Шарайчук Сергей Олександрович):
Не могу понять почему не записывает в файл, пробовал ставить условие как if strtoint(title)>50 then так и if strtoint(title)<50 then
А может title = "50"?
Воспользуйся отладчиком, посмотри, как исполняется код, и значения переменных.
З.Ы. Удивляют индивиды, пытающиеся писать интернет-приложения с использованием паскалевских I/O-функций. Выглядит это, как картины Сальвадора Дали, чесслово!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 22 августа 2011, 16:35 [#2]:
если бы title был бы "50", тогда было бы исключение.
Похоже тут дело в том, что файлы не закрываются. А раз не закрываются, то и запись не сохраняется . Все просто. (файл не обязан записываться физически на диск, если его не закрыли через closefile)
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Шарайчук Сергей Олександрович (статус: 2-ой класс), 22 августа 2011, 16:44 [#3]:
min@y™: нет title какраз не "50", именно для этого я вывожу значение title перед проверкой, выдает 200...
P.S. Если есть что предложить вместо I/O-функций с удовольствием выслушаю.
Вадим К: спасибо, так заработало глупая ошибка
Я бы изменил мир, но Бог не дает исходники!
|
|
min@y™ (статус: Доктор наук), 22 августа 2011, 16:45 [#4]:
Цитата (Вадим К):
если бы title был бы "50", тогда было бы исключение.
Ну, не придирайся. Ты же понял, о чём я хотел сказать.
Про CloseFile() ты, конечно, прав. Я не заметил, что не все файлы закрываются. Однако, я, всё-таки, за то, чтобы навсегда забыть паскалевские I/O-функции.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 22 августа 2011, 16:46 [#5]:
Цитата (Шарайчук Сергей Олександрович):
Если есть что предложить вместо I/O-функций с удовольствием выслушаю.
TMemoryStream, TFileStream, TStringList.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 22 августа 2011, 16:47 [#6]:
старые I/O-функции хороши. И часто они очень хорошо справляются с задачей. Но min@y™ предлагает пользоваться достижениями цивилизации и использовать TFileStream и подобные.
Что выбирать - дело вкуса. Но почему он не заметил, что у Вас есть куда больше проблема - ручной парсинг xml. Вот это уже очень плохо.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 22 августа 2011, 16:52 [#7]:
Цитата (Вадим К):
Но почему он не заметил, что у Вас есть куда больше проблема - ручной парсинг xml.
Судя по коду, там и парсить-то нечего.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 22 августа 2011, 16:56 [#8]:
я по слову rss почему то решил, что там rss и соответсвенно xml. А там обычный html.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Шарайчук Сергей Олександрович (статус: 2-ой класс), 22 августа 2011, 17:07 [#9]:
возник следующий вопрос, кинул на форму antifreeze, вставил процедуру sleep(60);
но программа посл записи первого значения в файл тупо висит
procedure TForm1.Button1Click(Sender: TObject);
var
rss,rss1,title,link:WideString;
url:string;
f,f1,f2:Textfile;
i:integer;
begin
assignfile(f,'c:\DleSites.txt');
assignfile(f1,'c:\DleSites2.txt');
assignfile(f2,'c:\Dle.txt');
Append(f2);
reset(f);
while not eof(f) do
begin
readln(f,url);
rss:=IdHTTP1.Get('http://shelkovo.org/pr-cy/?url='+url);
i:=1;
title:='';
while (i<=length(rss)) do
begin
if pos('<font size="3"><strong>тИЦ</strong>: ',rss)<>0 then
begin
Delete(rss,1,pos('<font size="3"><strong>тИЦ</strong>: ',rss)+length('<font size="3"><strong>тИЦ</strong>: ')-1);
title:=copy(rss,1,pos('</font><br>',rss)-1);
button1.Caption:=title;
if strtoint(title)>50 then
begin
Append(f1);
writeln(f1,url);
CloseFile(f);
CloseFile(f1);
sleep(60);
end;
i:=0;
end; end;
inc(i);
end;
end;
Я бы изменил мир, но Бог не дает исходники!
|
|
Amidamaru (статус: 4-ый класс), 22 августа 2011, 17:08 [#10]:
а я вот смотрю на код, и не пойму, а зачем вообще открывается f2?
|
|
Шарайчук Сергей Олександрович (статус: 2-ой класс), 22 августа 2011, 17:11 [#11]:
я по слову rss почему то решил, что там rss и соответсвенно xml. А там обычный html.
я просто код из другой своей проги вытащил, мне на даном этапе нужно только перелапатить файл с несколькими сотнями ссылок и отсеять все где ТИЦ меньше 50...
Я бы изменил мир, но Бог не дает исходники!
|
|
Amidamaru (статус: 4-ый класс), 22 августа 2011, 17:15 [#12]:
а может strtoint не рассчитан на widestring?
попробуй
if strtoint(button1.Caption)>50 then
|
|
Шарайчук Сергей Олександрович (статус: 2-ой класс), 22 августа 2011, 17:20 [#13]:
if strtoint(button1.Caption)>50 then
от зависания не спасло
Я бы изменил мир, но Бог не дает исходники!
|
|
Вадим К (статус: Академик), 22 августа 2011, 17:23 [#14]:
проблема опять с закрытием файла. Открываете Вы их вне цикла, а закрываете внутри. Понятно, что после того, как файл закрыт, запись туда невозможна. то, что оно виснет - это просто ещё повезло.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 22 августа 2011, 17:57 [#15]:
Предлагаю переписать этот говнокод с нуля, разделив задачу на подзадачи (функции).
1. Закачка в TMemoryStream и сохранение в TStringList.
2. Парсинг TStringList.
3. Сохранение в файл.
И не надо морочить себе голову.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
22 августа 2011, 21:29: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с файловой системой модератором Ерёмин А.А.
|
Amidamaru (статус: 4-ый класс), 23 августа 2011, 00:39 [#16]:
min@y™: это конечно было бы замечательно, но если Сергей Олександрович не хочет менять код так кардинально, то я бы просто предложил работать с файлами через TStringList'ы. Ведь файлы - текстовые и так работать будет намного проще.
|
23 августа 2011, 18:41: Вопрос закрыт (решение принял автор вопроса — Шарайчук Сергей Олександрович): Вопрос частично решен, переписал код, и сейчас хочу создать новый вопрос который будет отличаться от это но будет решать именно эту проблему 
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|