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

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

AssignFile? [D5, D6, Win95/98, WinXP]


Fog ©   (2002-09-15 12:52:00) 

Извините за ламерскую прозьбу, но не могли бы вы привести мне пример чтения определенной информации из фаила (строки или определенного знака). Я знаю что это делается с AssignFile, но у меня ничего не получается :(


Алексей Ким   (2002-09-15 15:47:00) [1]

а разве Chr(a) надо? оно и так чар


777   (2002-09-15 15:38:00) [2]


function ReadFile(FileName:String):String;
var f:TFileStream;
a:integer;
begin
f:=TfileStream.Create(FileName,fmOpenRead);
f.Position := 0;
while f.Position < f.Size do
begin
a:=0;
f.Read(a,1);
Result:=Result+Chr(a);
end;
f.Free;
end;

так тоже работает.
может пригодится:)))


Алексей Ким   (2002-09-15 15:28:00) [3]

забыл... uses Windows,SysUtils; не нада


Алексей Ким   (2002-09-15 15:27:00) [4]

хм... не понял...
вот так все работает
--
program myprog;

{$APPTYPE CONSOLE}

uses Classes, Windows, SysUtils;

var i: TFileStream;
a: Char;

begin
i := TFileStream.Create("1.txt",$0000);
i.Position := 0;
while i.Position<i.Size do
begin
i.Read(a,1);
Write(a);
end;
i.Free;
end.


777   (2002-09-15 15:21:00) [5]

a:integer;
f := TFileStream.Create(filename, $0002);
f.Position := 0;
while f.Position < f.Size do
begin
f.Read(a,1);
f.Write(a,1);
Result :=Result+ Chr(a);
end;
f.Free;


Fog   (2002-09-15 15:16:00) [6]


> Алексей Ким

Но мне нужно читать Stringили integer, а получается - ‹Ж^[Г
...


Fog   (2002-09-15 14:43:00) [7]


> greenrul

[Error] Unit1.pas(35): Incompatible types: "procedure, untyped pointer or untyped parameter" and "String"


Алексей Ким   (2002-09-15 14:21:00) [8]

помоему гораздо легче делать ето с TFileStream
там не надо ресет/реврайт просто
var f: TFileStream;
a: Char;

f := TFileStream.Create(filename, $0002);
f.Position := 0;
while f.Position < f.Size do
begin
f.Read(a,1);
f.Write(a,1);
Result := Result + a;
end;
f.Free;

в результе получаешь файл не важно бинарный или нет


greenrul   (2002-09-15 13:58:00) [9]

var
f:file;
s:string;
begin
assignfile(f,"твой файл");
reset(f); {чтение}
{если хочешь писать в файл, делай rewrite(f)}
ReadLn(f,s); {читает 1ую строку в переменную s, после чего переходит на новую, просто Read не переносит на новую
}
ReadLn(f,s){читает 2ую строку в переменную s}
.... n раз
ReadLn(f,s){читает n-ую строку в переменную s}
{записывать в файл соответсвенно WriteLn(f,s);}
closefile(f);
end;


Doctor Snap   (2002-09-15 13:14:00) [10]

Если двоичный файл-

var
f:file;
bufer:array [0..255] of byte;
z,k:integer;
begin
assignfile(f,"твой файл");
reset(f,1)(для существующего) или rewrite(f,1);(для несуществующего или если хочешь переписать существующий)
k:=filesize(F);- размер файла
seek(f,0); установка позиции в файле.
blockread(f,bufer,255,z);
blockwrite(f,bufer,255,z);
-это запизывает в файл из буфера 255 байт. z- количество реально обработанных блоков (работает как возврат из функции)
closefile(f);
end;

второй параметр в reset rewrite- размер одного блока в файле. Лучше ставить 1.


Наверх

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