Главная страница
    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
4-1143631694
apic
2006-03-29 15:28
2006.07.02
Извлекаю иконку с помощью ExtractAssociatedIcon, как ее потом


3-1146815925
Nike
2006-05-05 11:58
2006.07.02
Как установить значения поля по умолчанию в добавляемой записи


15-1149595640
Marser
2006-06-06 16:07
2006.07.02
История повторяется...


15-1149585583
Palladin
2006-06-06 13:19
2006.07.02
hosting.rbc.ru


2-1148205577
mefodiy
2006-05-21 13:59
2006.07.02
Вывод знаков псевдографики в RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский