| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |