Главная страница
    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.47 MB
Время: 0.055 c
2-1191986806
Mariya
2007-10-10 07:26
2007.11.04
Скрыть button


15-1191013364
Kostafey
2007-09-29 01:02
2007.11.04
С днем рождения ! 29 сентября


15-1190696752
арпывапр
2007-09-25 09:05
2007.11.04
блокировка alt+ctrl+del или что делать с USB


5-1147251414
DimaBr
2006-05-10 12:56
2007.11.04
Удаление компонента


4-1178286129
White Barsik
2007-05-04 17:42
2007.11.04
LoadLibrary, GetProcAddress и пр.





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