![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с функцией BlockRead [D7, WinXP]
Генри © (2005-02-25 16:58:00)procedure TForm1.Button1Click(Sender: TObject);
var
f:File;
Buf:array [1..255] of Char;
begin
if OpenDialog1.Execute then
AssignFile(f,OpenDialog1.FileName);
Reset(f);
while not eof(f) do begin
BlockRead(f,Buf,2);
end;
Edit1.Text:=Buf;
CloseFile(f);
end;
end.
Вопрос - почему в Edit1 выводится абракадабра??
PS прошу прощения за дурацкий вопрос.
SVM (Perm) (2005-03-01 15:31:00) [1]Разумеется, но речь не идет о явном приведении типа.
begin...end (2005-03-01 15:25:00) [2]> SVM (Perm) (01.03.05 15:17) [20]
Да, но в таких случаях логичнее передавать указатель на массив: MyProc( @Buf) и MyProc( @Buf1).
SVM (Perm) (2005-03-01 15:17:00) [3]procedure MyProc(P:PChar);
begin
end;
var
Buf:array[0..10] of Char;
Buf1:array[1..11] of Char;
begin
MyProc(Buf);//-OK
MyProc(Buf1)//-Ругань
end;
begin...end (2005-03-01 15:10:00) [4]> SVM (Perm) (01.03.05 15:09) [18]
Доказательства будут?
SVM (Perm) (2005-03-01 15:09:00) [5]Со String совместимы символьные массивы с любой базой.
С PChar - только с базой 0.
Anatoly Podgoretsky (2005-03-01 13:42:00) [6]Да без разницы по какому Паскалю, PChar ничего не знает ни про какие индексы, все что изместно, так то что он указывает на какой то символ, не обязательно на первый и предполагается, что эта последовательность заканчивается нулем.
Чапаев (2005-03-01 13:24:00) [7]> Недопонял, база ни причем, нормально и array [10..100] of char;
Странно... Значит у меня данные по Паскалю 7. ;-)
Anatoly Podgoretsky (2005-03-01 13:06:00) [8]Чапаев © (01.03.05 12:46) [14]
Недопонял, база ни причем, нормально и array [10..100] of char;
А PChar совместим с указателем на символ, в расширенном синтаксе на массив символов, и подразумевается, что данный массив оканчивается символом нуля, но это по негласному соглашению.
Чапаев (2005-03-01 12:46:00) [9]Кстати, чего-то я недопонял. Насколько известно мне, со string/PChar совместимы символьные массивы с базой 0. А тут база 1. Чего я недопонял?
icWasya (2005-03-01 12:38:00) [10]Reset+F1
Reset(f ,1);!!
Eraser (2005-02-25 21:50:00) [11]Генри ©
Надо было для решения твоей проблемы выбрать поток (TFileStream), по той причине, что при использовании технологии .NET можно пользоваться только file of text, а типизированые и нетипизированые файлы канули в лету...
Переход к .NET уже не загорами...
Генри (2005-02-25 17:54:00) [12]Всем спасибо за помощь! наконец-таки разобрался. всё работает!
спасибо!!!
begin...end (2005-02-25 17:36:00) [13]> Генри © (25.02.05 17:21) [7]
Если нужно читать из файла два символа, зачем же Вы читаете из него 256байт? Это раз.
Вы должны добавить в массив в нужное место символ с кодом 0 и преобразовать массив к типу String. Это два.
И, наконец, зачем это всё? Чем не подходят текстовые файлы (см. [8])? Это три.
DiamondShark (2005-02-25 17:32:00) [14]Не правильно думал.
BlockRead(f,Buf,2) читает не два символа, а два буфера.
По умолчанию (reset без размера буфера) буфер 128 байт.
Значит, читаются 256 байт за раз.
Во-первых, это больше размера переменной (Buf содержит 255 байт), во-вторых, после цикла в переменной останутся последние 256 байт файла (да и то, если размер файла кратен 256).
В общем, бред написан.
Anatoly Podgoretsky (2005-02-25 17:29:00) [15]Текстовый файл это F : TextFile;
Генри (2005-02-25 17:21:00) [16]2 Anatoly Podgoretsky
Я так думал, что если открывается текстовый файл, то в Edit1 выводится первые два символа этого файла? Нет? поправьте,пожалуйста.
olookin (2005-02-25 17:19:00) [17]procedure TForm1.Button1Click(Sender: TObject);
var f: TFileStream;
Buf:array [1..255] of Char;
begin
if OpenDialog1.Execute then begin
f:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
f.Read(Buf,SizeOf(Buf));
Edit1.Text:=Buf;
f.Free;
end;
end;
Anatoly Podgoretsky (2005-02-25 17:11:00) [18]И если они имеют отношение к тексту, зачем то он пытается бинарные данные загнать в Edit1.Text
begin...end (2005-02-25 17:09:00) [19]...если, конечно, эти 256 байт там есть.
begin...end (2005-02-25 17:08:00) [20]> Генри © (25.02.05 16:58)
Размер массива Buf - 255 байт. А из файла в него читается 256 байт.