Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 12 января 2012, 18:53
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 16 января 2012, 11:48; участников в обсуждении: 3.
winner13

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

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™

min@y™ (статус: Доктор наук), 12 января 2012, 19:59 [#4]:

while not Eof(F) do
  begin
    Readln(F, s);
  end;
Это индусы писали? Ты издеваешься? Ясен пень, последняя строка только и будет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winner13

winner13 (статус: 1-ый класс), 12 января 2012, 20:43 [#5]:

А делать то чего???

И я не индус =(... По логике должно

пока не конецфайла(ф) делать
Начало
Читать(фиал в буфер эс)
Конец
Не решимых проблем нет, есть неприятные для нас решения.
min@y™

min@y™ (статус: Доктор наук), 12 января 2012, 21:43 [#6]:

Но прочитанные данные надо куда-то девать и как-то обрабатывать, ёмаё! А они у тебя теряются.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

12 января 2012, 23:22: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с файловой системой модератором Ерёмин А.А.

winner13

winner13 (статус: 1-ый класс), 13 января 2012, 14:35 [#7]:

Во тут то я и не понял чего делать ... Отсюда и лаг с while not Eof(F) do подскажите как лучше сделать???
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 13 января 2012, 14:38 [#8]:

А чем мой код не устраивает?
Галочка "подтверждения прочтения" - вселенское зло.
winner13

winner13 (статус: 1-ый класс), 13 января 2012, 15:43 [#9]:

Асигнед(Ф) ошибка идёт о несовместимом типе... Сути которой я тоже не понял, до этого ведь всё работало...
Не решимых проблем нет, есть неприятные для нас решения.
Вадим К

Вадим К (статус: Академик), 13 января 2012, 16:41 [#10]:

у F должен быть тип File или TextFile.
Но вот Assigned(F) там не нужен (сам не досмотрел).
Галочка "подтверждения прочтения" - вселенское зло.
winner13

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

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.