Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 18:44   #1
kalyakin
 
Регистрация: 20.08.2010
Сообщений: 7
По умолчанию файл не читается до конца

Проблема в чтении текстового файла всего пол метра размером. Пробовал разные процедуры, но всегда одно и то же, а именно...

файл выглядит таким образом:

яю  $(,0448<@DHLLPTX\``dhlpttx|__"___"" __*¤Ё┐°_ёАДИМРФШЬадд px|_"___"__¤Ё┐°_ё_АДИМРФШЬадд... и ещё пару сотен символов

при чтении файла всегда выводится только этот отрезок:

яю  $(,0448<@DHLLPTX\``dhlpttx|__"___"" __ ¤Ё┐°_ёАДИМРФШЬадд

то есть чтение останавливается на символе, имеющем нулевой код (если верить FAR).
Как заставить пригу читать файл полностью?
kalyakin вне форума Ответить с цитированием
Старый 20.08.2010, 18:50   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Так покажи код, как ты читаешь файл...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 20.08.2010, 19:26   #3
kalyakin
 
Регистрация: 20.08.2010
Сообщений: 7
По умолчанию

да хотя бы тот,что в представленном на сайте исходнике в категории работа с файлами\чтение из файла
kalyakin вне форума Ответить с цитированием
Старый 20.08.2010, 19:38   #4
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

попробуй в мемо загрузить, или в RichEdit

memo1.lines.loadfromfile('имя файла');

а вообще у тебя файл не текстовый, или кодировка файла какаянить хитрая, может юникод, изза этого идет "смещение" символов и проскакивает нулевой символ, а твоя прога определяет его как конец файла.
GoodDA вне форума Ответить с цитированием
Старый 20.08.2010, 19:56   #5
kalyakin
 
Регистрация: 20.08.2010
Сообщений: 7
По умолчанию

loadFromFail я тоже пробовал и через буфер тоже. Я тоже думаю, что прога считает этот символ концом файла (где-то в учебника я встречал понятие истинный ноль), но как это избежать ?
kalyakin вне форума Ответить с цитированием
Старый 20.08.2010, 21:33   #6
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

определяй размер файла, и читай через буфер нужное кол-во раз
GoodDA вне форума Ответить с цитированием
Старый 20.08.2010, 21:53   #7
kalyakin
 
Регистрация: 20.08.2010
Сообщений: 7
По умолчанию

размер 512 КБ. а что значит читать через буфер нужное количество раз?
Если я даю буферу команду прочитать и запомнить 70 символов, а этот злополучный нулевой символ стоит 64-м, то из буфера в мемо попадает только 63 символа.
kalyakin вне форума Ответить с цитированием
Старый 20.08.2010, 23:54   #8
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

вот пример, но имхо это изврат читать "битый" файл как текстовый

http://www.delphisources.ru/pages/fa..._file_eof.html

Код:
var
  f1 :file of Byte;
  a :Byte;
  i :Longint;
begin
  AssignFile(f1, 'a.dat');
  Reset(f1);
  for i := 1 to FileSize(f1) do
  begin
     Read(f1, a);
     if a <> 26 then  memo1.text := memo1.text + chr(a);
  end;
  CloseFile(f1);
end;
GoodDA вне форума Ответить с цитированием
Старый 21.08.2010, 09:13   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

присоединяясь к вышесказанному.
1) Читать файл надо НЕ КАК ТЕКСТОВЫЙ! (либо file, либо file of byte. А вообще в данном случае лучше использовать TFileStream)

2) прочитанные данные напрямую бросать в визуальные компоненты не очень хорошая мысль - TEdit, TMemo и прочая предназначены для отображения/редактирования ТЕКСТА! Что они будут делать, если в них загрузить символы с кодами 00..31 - можно только догадываться. Но, думаю, ничего хорошего при этом не отобразиться!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2010, 09:45   #10
kalyakin
 
Регистрация: 20.08.2010
Сообщений: 7
По умолчанию

Спасибо за пример, он работает. Я изменил код и чтение идёт не останавливаясь на нулевых символах.
Вот код:
Код:
var
  f1 :file of Byte;
  a :Byte;
  i :Longint;
begin
  AssignFile(f1, 'C:\1.dat');
  Reset(f1);
  for i := 1 to 200 do
  begin
     Read(f1, a);
     memo1.text := memo1.text + chr(a);
  end;
  CloseFile(f1);
end;
Но есть одно но. Эти нулевые символы выбрасываются из текста и в memo не попадают,а без них файл не будет работать. Какой цикл написать, чтобы они не пропадали?

Последний раз редактировалось Stilet; 21.08.2010 в 10:00.
kalyakin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл не читается ( element Общие вопросы Delphi 8 24.06.2009 20:40
bmp файл читается не до конца CHizzzER Общие вопросы C/C++ 3 30.03.2009 12:37
Не читается файл Акашаев Нурлан PHP 6 17.11.2008 12:58
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Не могу прочитать файл до конца... FEAR Общие вопросы C/C++ 9 04.01.2007 21:46