Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
ВнизСтранная штука с записью и чтением в и из файла Найти похожие ветки
← →
Blind Guardian (2007-10-14 17:34) [0]Здравствуйте. Столкнулся с непонятным мне явлением. Написал небольшой код, в котором хорошо отражается проблема:
{$APPTYPE CONSOLE}
{$o-}
const
filename="text.txt";
len=26;
type
ptext=^text;
Tstruct=array [0..len-1] of integer;
const
sz=sizeof(Tstruct);
procedure readFromFile(addr:pbyte;size:integer;pf:ptext);
var
i1:integer;
c:char;
begin
for i1:=0 to size-1 do begin
read(pf^,c);
addr^:=ord(c);
inc(addr);
end;
end;
procedure writeToFile(addr:pbyte;size:integer;pf:ptext);
var
i1:integer;
begin
for i1:=0 to size-1 do begin
write(pf^,chr(addr^));
inc(addr);
end;
end;
var
i1:integer;
ar:Tstruct;
f1:text;
begin
for i1:=0 to high(ar) do
ar[i1]:=i1; //заполняем массив
assign(f1,filename);
rewrite(f1);
{}writeToFile(@ar,sz,@f1);
{for i1:=0 to high(ar) do
writeToFile(@ar[i1],8,@f1);}
close(f1);
fillchar(ar,sz,0);//изменяем массив (в данном случе, заполняя его нулями)
assign(f1,filename);
reset(f1);
{}readFromFile(@ar,sz,@f1);
{for i1:=0 to high(ar) do
readFromFile(@ar[i1],8,@f1);}
close(f1);[Small][/Small]
for i1:=0 to high(ar) do
writeln(ar[i1]); //выводим массив
readln;
end.
Суть такова: записать данные (в данном случае - array [0..len-1] of integer) в файл, а потом прочесть информацию из файла.
Для записи информации из оперативной памяти в файл я создал writeToFile, для чтения файла в память - readFromFile. И там, и там: Addr - адрес в памяти, size - к-во байт для чтения или записи, pf - указатель на открытый файл.
Запустите эту программу. Всё работает, как надо. Но измените значение константы len на 27 и тогда запустите. То же самое повторяется при всех значениях len больше 26.
В чем дело? Как заставить работать программу нормально?
← →
Blind Guardian (2007-10-14 17:44) [1]ой. не смотрите, на то, что в коментарии
← →
Desdechado © (2007-10-14 19:15) [2]Скажи, зачем ты работаешь текстовыми методами с нетекстовыми данными?
← →
Однокамушкин (2007-10-14 19:40) [3]Символ #26 является признаком конца текстового файла, всё, что идёт после него, игнорируется
← →
Blind Guardian (2007-10-15 00:49) [4]Desdechado © (14.10.07 19:15) [2]
так. а как мне записать определенный байт в файл, кроме как write(f,chr(any_number))?
Однокамушкин (14.10.07 19:40) [3]
тогда как действовать, если этот байт попадается спонтанно?
← →
Плохиш © (2007-10-15 01:03) [5]TFileStream
BlockWrite/BlockRead, читать описание работы с файлами...
← →
Германн © (2007-10-15 01:05) [6]
> так. а как мне записать определенный байт в файл, кроме
> как write(f,chr(any_number))?
Тип файловой переменной измени. Процедурами Read и Write не единственные. Есть и их аналоги для других типов файлов. Кстати даже более оптимальные.
← →
Германн © (2007-10-15 02:18) [7]
> Blind Guardian (14.10.07 17:34)
Вот это прочитай http://www.delphikingdom.com/lyceum/seminar.asp?ID=2
Полезно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.407 c