Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как считать файл и получить массив из байт [D6, WinXP]


zodiak ©   (2005-10-11 15:48:00) 

Есть Файл примерного содержания...

\x4INTGl   \x1                тя\x16 \xE     цяця    
\x10 \x10 \x16 \x16 \x14 \x14 \xE \xE
 \x10 \x10
 шяшяъяъя\x4 \x4 \xE \xE \x14 \x14 \x14 \x14 \x10 \x10
 \x8 \x8 \x12 \x12
 тятяьяья\x4 \x4 \xE \xE \x12 \x12 \x14 \x14 \xE \xE
 \x8 \x8 \xE \xE     фяфяюяюя\x4 \x4     \x12 \x12 \x12 \x12     \x8 \x8 \x6 \x6 \xE \xE     тятя    \x4 \x4 \xE \xE \x12 \x12 \x10 \x10
 \x4 \x4 \x4 \x4 \x8

Со структурой файла более менее разобрался
Теперь задача моя получить файл аналогичного типа
Но с немного измененными данными ...

Как такое сделать ?

Т.е. Кодировка ASCII , ...

Код каждого символа я расшифровал ...



procedure TForm2.Button1Click(Sender: TObject);
var f,f1:file;
   i,size:integer;
   s,s1:string;
   buf : array [1..258] of integer;
   ch:char;
   St:Tstrings;
begin
st:=nil;
If Opendialog1.Execute then
try
St:=TstringList.Create;
St.LoadFromFile(opendialog1.FileName); //Загрушаю файл

S:=St.Text; // сохраняю файл в строку

Memo1.Lines.Add(s);// - !!! Выводит не все символы , т.к. не видит конца строки

For i:=1 to (246+12) do   //почему не 246 - не размер файла
 begin
    memo1.Lines.Add(inttostr(ord(s[i]))); // Выводит код каждого символа в файле
    buf[i]:=ord(s[i]);

    Memo2.Lines.Add(inttostr(ord(s1[i])));
 end;

memo2.Clear;
St.clear;
St.text:=S;
St.Savetofile('1__Mat.mat');// - ПОЧЕМУ не сохраняет как исходный файл
{
for i:=1 to 258 do           // 246 (Исходный размер файла)+12
Memo2.Lines.Add(inttostr(buf[i]));

St.SaveToFile('Lenokkk.mat');
except
 Showmessage('Name fule invalid');
end;
if assigned(st) then  St.Free;
end;

end.


Короче говоря как считать файл ПОБАЙТНО , получить массив из байт (этого файла).
И как ПОБАЙТНО сохранить , чтоб структура файла не поменялась ? ....


cyborg   (2005-10-12 14:49:00) [1]


> [7] TUser ©   (11.10.05 19:00)
> а читать надо начиная с первого.

Ты хотел сказать с нулевого? :)


TUser   (2005-10-11 19:00:00) [2]

> Почему ноль ????

Это первый элемент. Остальные в памяти располагаются пследовательно, а читать надо начиная с первого.


zodiak   (2005-10-11 17:26:00) [3]

Ну тут я считываю всего-лишь первый байт ...
А весь файл зачитать массивом ???
меня 0 на  интересю нас число ???...


Digitman   (2005-10-11 17:19:00) [4]


> Почему ноль ?


а почему бы НЕ ноль ?


zodiak   (2005-10-11 17:11:00) [5]

пока тоже не проверял ....

BlockRead(F,ChrBuf[0],FileSize(F));
                          ^
              Почему ноль ????


Ega23   (2005-10-11 16:00:00) [6]


> St:=TstringList.Create;


С фига-ли TStringList??????

Грузи в TMemoryStram, а потом по-байтно пробуй оттуда читать...


лысеющий   (2005-10-11 16:00:00) [7]


procedure TForm1.Button1Click(Sender: TObject);
var
 F: File;
 ChrBuf: array of Char;
begin
 AssignFile(F,'èìÿ_ôàéëà');
 try
   Reset(F,1);
   try
     SetLength(ChrBuf,FileSize(F));
     BlockRead(F,ChrBuf[0],FileSize(F));
     Memo1.Text := String(ChrBuf);
   finally
     ChrBuf := nil;
     CloseFile(F);
   end;
 except
   //error
 end;

end;


P.S не проверял


Digitman   (2005-10-11 15:54:00) [8]

это не текстовый файл.


Наверх

Титульная страница Поиск, карта сайта Написать письмо