Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Вниз

Работа с файлами   Найти похожие ветки 

 
GlebKl ©   (2006-06-16 00:43) [0]

Нашел описание нужного мне типа файла:

PDT:                                                        
Вначале файла всегда находится текст "JTV 3.x TV Program Data" за ним три символа с кодом 0Ah, дальше, начиная со смещения 01Ah повторяются записи
переменной длины:
* 2 байта на количество символов в названии
* Hазвание телепередачи

Мне нужно всего лишь считать всю информацию из этого файла.
Пожалуйста, скажите, каким образом это возможно?


 
GlebKl ©   (2006-06-16 02:39) [1]

Все, что у меня получилось - прога считала символ "J" и записала его в buf в виде цифры. Возможно ли считать сразу 26 символов и записать их в "s:string" ?


 
Cashmare ©   (2006-06-16 02:45) [2]

Ну, объяви file of byte и делай с ним, что хочешь...
Еще цикл поможет :) А внутри s:=s+...


 
Loginov Dmitry ©   (2006-06-16 10:19) [3]

GlebKl ©   (16.06.06 2:39) [1]
Возможно ли считать сразу 26 символов и записать их в "s:string"


Конечно!


 
tesseract ©   (2006-06-16 10:25) [4]


>  Возможно ли считать сразу 26 символов и записать их в "s:
> string" ?

С диска меншьше 4 кб не считашь - ОС минимум по 4кб читает.


 
Loginov Dmitry ©   (2006-06-16 10:29) [5]

Но ведь можно использовать потоки TStream. А там все просто:

SetLength(S, 26);
TStream.Read(PChar(S)^, 26);

Так примерно :)


 
GlebKl ©   (2006-06-16 13:45) [6]

Ребята, спасибо! Работать с файлами вроде научился. Почти. :)  Возникает непонятная ошибка "Project Project1.exe raised exception class EAccessViolation with message "Access violation at address EFEEF2F1. Read of address EFEEF2F1". Process stopped. Use Step or Run to continue." при выполнении следующей процедуры:


...
var    fPdt,fNdx:file;
buf,buf2,j:integer;
...
procedure TForm1.FileListBox1Click(Sender: TObject);
var strPdt:string;
s1,s2,s3:string;
q,i,Colvo_Zapisey:integer;
ckl:filetime;
ckl1:systemtime;
begin

  strPdt:=copy(FileListBox1.FileName,0,pos(".",FileListBox1.FileName))+"pdt";
  assignfile(fNdx,FileListBox1.FileName);
  assignfile(fPdt,strPdt);
  reset(fNdx,1);
  blockread(fNdx,buf,2);
  Colvo_Zapisey:=buf;
for i:=1 to Colvo_Zapisey do begin
 blockread(fNdx,buf,2);
 blockread(fNdx,ckl,8);
 FileTimeToSystemTime(ckl,ckl1);
 s2:="";
 s2:= inttostr(ckl1.wHour)+":"+inttostr(ckl1.wMinute);
 blockread(fNdx,buf,2);
 reset(fPdt,1);
 blockread(fPdt,buf2,buf);
 blockread(fPdt,buf,2);
 s3:="";
 if eof(fPdt) then exit;
 for j:=1 to buf do begin
     blockread(fPdt,buf2,1);
     s3:=s3+chr(buf2);
 end;
   closefile(fPdt);
 if ckl1.wDayOfWeek = 1 then begin
  StringGrid1.Cells[0,i-1]:=s2;
  StringGrid1.Cells[1,i-1]:=s3;
 end;
end;
end;


Кто виноват? Что делать?


 
GlebKl ©   (2006-06-16 14:30) [7]

забыл сказать: NDX:
первые два байта в файле - количество записей, дальше идут записи, каждая размером 12 байт:
* первые 2 байта в записи всегда равны 0
* восемь байт структуры FILETIME (дата и время начала телепередачи)
* два байта - смещение-указатель в файле PDT на количество символов в названии телепередачи.

Фишка в том, что прога должна прочитать программу на понедельник и вывести ее в StringGrid1.


 
medved_68 ©   (2006-06-16 15:11) [8]

А нафига используешь BlockRead??? Зачем так сложно???
Создай из FileListBox имя файла с полным путем к нему и используй:

var
potok:TFileStream;
begin
Potok:=TFileStream.Create(Имя файла,fmOpenRead);
...и копируй все что надо из потока куда надо методами
Potok.Read или Potok.ReadBuffer
по окончанию работы
Potok.Free
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
2-1150119269
Yegorchic
2006-06-12 17:34
2006.07.02
DLL и Self


15-1149625503
GanibalLector
2006-06-07 00:25
2006.07.02
Плагины ( & формы в DLL ) теория


2-1149941024
demonygas
2006-06-10 16:03
2006.07.02
Плиз! Помогите осуществить перевод вешественного числа в строку


2-1150099302
He3Hauka
2006-06-12 12:01
2006.07.02
OpenGl


1-1148463964
jeka_t
2006-05-24 13:46
2006.07.02
Как убрать возможность вызова контекстного меню TMemo?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский