Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1175002147
ElectriC
2007-03-27 17:29
2007.11.04
Липкие окна


11-1175358495
Dmitriy___
2007-03-31 20:28
2007.11.04
Collapse


15-1191433347
ке
2007-10-03 21:42
2007.11.04
про формы


2-1191920499
r.o.o.t
2007-10-09 13:01
2007.11.04
Закрытие формы


1-1187360648
andreoman
2007-08-17 18:24
2007.11.04
уничтожение формы при ее закрытии





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