|
Вопрос # 5 875/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
В целом пытаюсь реализовать функцию чтения из файла с выводом содержимого через DrawText(ps.HDC, PChar(s), length(s), rc, DT_WORDBREAK or DT_CENTER);
Код чтения из файла и вывода текста в переменную S таков:
begin // функция вставки текста из скаченого файла
AssignFile(F, 'www.txt');
if Assigned(F) then
Reset(F);
while not Eof(F) do
begin
Readln(F, s);
end;
CloseFile(F)
else
s := #13 + #13 + 'Новости не найдены, проверьте параметры подключения к сети интернет';
end;
Вся проблема заключается в том, что если выводится текст, то почему-то лишь последняя строчка,тоесть где есть энтер (текст прерывается на символ #13), текст выводится перестаёт после него или в моём случае перед ним.
Как вывести весь текст из фала? даже если он будет в таком формате:
Печатный текст(тут энтер)
Текст продолжает выводится(тут ещё энтер)
окончание выводимого текста.
 |
Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 12 января 2012, 18:53
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 12; последнее сообщение — 16 января 2012, 11:48; участников в обсуждении: 3.
|
winner13 (статус: 1-ый класс), 12 января 2012, 18:58 [#1]:
И забыл ещё, "S" Это буфер куда идёт содержимое файла www.txt и тут же выводится в DrawText.
Сама логика программы такова:
Скачивание фала из сети. Сохранение. Читение данных из файла, вывод онных в окошко.
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 12 января 2012, 19:28 [#2]:
Так Ваш код и выводит последнюю строку (она может быть и пустой).
Попробуйте сделать так
var s, t;
begin // функция вставки текста из скаченого файла
s := '';
if fileexists('www.txt') then begin
AssignFile(F, 'www.txt');
Reset(F);
while not Eof(F) do
begin
Readln(F, t);
s := s + t + #13#10;
end;
CloseFile(F)
end
else
s := #13 + #13 + 'Новости не найдены, проверьте параметры подключения к сети интернет';
end;
P.S. begin-end в then ветке специально забыт?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
winner13 (статус: 1-ый класс), 12 января 2012, 19:49 [#3]:
Попробывал ваш код, вкусно но почему то ругается на
строку
if Assigned(F) then begin
Вот такой ошибкой
[DCC Error] newsreder.dpr(403): E2008 Incompatible types
Откуда несовместимый тип когда var указан :
F: TextFile;
s, t: string;
вообще не понятно...
Не решимых проблем нет, есть неприятные для нас решения.
|
|
min@y™ (статус: Доктор наук), 12 января 2012, 19:59 [#4]:
while not Eof(F) do
begin
Readln(F, s);
end;
Это индусы писали? Ты издеваешься? Ясен пень, последняя строка только и будет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
winner13 (статус: 1-ый класс), 12 января 2012, 20:43 [#5]:
А делать то чего???
И я не индус =(... По логике должно
пока не конецфайла(ф) делать
Начало
Читать(фиал в буфер эс)
Конец
Не решимых проблем нет, есть неприятные для нас решения.
|
|
min@y™ (статус: Доктор наук), 12 января 2012, 21:43 [#6]:
Но прочитанные данные надо куда-то девать и как-то обрабатывать, ёмаё! А они у тебя теряются.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
12 января 2012, 23:22: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с файловой системой модератором Ерёмин А.А.
|
winner13 (статус: 1-ый класс), 13 января 2012, 14:35 [#7]:
Во тут то я и не понял чего делать ... Отсюда и лаг с while not Eof(F) do подскажите как лучше сделать???
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 13 января 2012, 14:38 [#8]:
А чем мой код не устраивает?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
winner13 (статус: 1-ый класс), 13 января 2012, 15:43 [#9]:
Асигнед(Ф) ошибка идёт о несовместимом типе... Сути которой я тоже не понял, до этого ведь всё работало...
Не решимых проблем нет, есть неприятные для нас решения.
|
|
Вадим К (статус: Академик), 13 января 2012, 16:41 [#10]:
у F должен быть тип File или TextFile.
Но вот Assigned(F) там не нужен (сам не досмотрел).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
winner13 (статус: 1-ый класс), 15 января 2012, 20:21 [#11]:
А как сделать допустим проверку без system либы(то есть без assigned или fileexist), есть ли в S какой либо текст???
Побывал так(после этой попытки чётко почувствовал на сколько я далек от программирования ):
begin // функция вставки текста из скаченого файла
s := '';
begin
AssignFile(F, 'www.txt');
Reset(F);
while not Eof(F) do
begin
Readln(F, t);
s :=s + t + #13#10;
end;
CloseFile(F);
if length(t)=0 then
s='Файл с новостями не найден, проверите подключение интернет'+#13;// }
end;
//
end; // вывод текста из файла }
DrawText(ps.HDC, PChar(s), length(s), rc, DT_WORDBREAK);
Но почему то вроде на вреную логику событий всё время выводит сообщение:
"Файл с новостями не найден, проверите подключение интернет"
А если действительно удалить файл, то раундтайм еррор выскакивает...
Не решимых проблем нет, есть неприятные для нас решения.
|
|
winner13 (статус: 1-ый класс), 16 января 2012, 11:48 [#12]:
нашёд решение, вставить напрямую в код функцию фаил екзист без подключения библиотеки SysUtil:
function FileExists(FileName: string): Boolean;
var
FindData: TWin32FindData;
begin
Result := (FindFirstFile(PChar(FileName), FindData) <> INVALID_HANDLE_VALUE);
end;
Не решимых проблем нет, есть неприятные для нас решения.
|
16 января 2012, 11:48: Статус вопроса изменён на решённый (изменил автор вопроса — winner13)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|