![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Кусок кода, где создается файл F и в него записываются случайные числа. при компиляции ошибка
[dcc32 Error] Unit1.pas(86): E2066 Missing operator or semicolon ругается именно на CloseFile(f); Код:
procedure TForm1.Button1Click(Sender: TObject);
var
x16,x161:byte; toEdit2:string;
begin randomize;
AssignFile(f, 'key.txt');
rewrite(f);
Edit2.Text:='';
for i:=0 to 9 do
begin
key[i]:=random(255);
writeln(f, key[i]);
//отображение ключа в 16-ричной системе ->
x16:=key[i] div 16;
x161:=key[i] mod 16;
if (x16 < 10) then toEdit2:=inttostr(x16)
else case x16 of
10: toedit2:='A';
11: toedit2:='B';
12: toedit2:='C';
13: toedit2:='D';
14: toedit2:='E';
15: toedit2:='F';
end;
if (x161 < 10) then toEdit2:=toedit2 + inttostr(x161)
else case x161 of
10: toedit2:=toedit2 + 'A';
11: toedit2:=toedit2 + 'B';
12: toedit2:=toedit2 + 'C';
13: toedit2:=toedit2 + 'D';
14: toedit2:=toedit2 + 'E';
15: toedit2:=toedit2 + 'F';
end;
Edit2.Text:=Edit2.Text + '$' + toedit2 + ' ';
end; // <- отображение ключа в 16-ричной системе
closefile(f);
end;Последний раз редактировалось Admin, 21.05.2014 в 19:30. |
|
#2
|
||||
|
||||
|
У вас много концов и мало бегинов, и пжлст, пока ни кто не видел оформите ваш код в тег [СОDE]...[/СОDE]
З.Ы. Только что проверил - код работает Последний раз редактировалось Alegun, 21.05.2014 в 16:24. |
|
#3
|
|||
|
|||
|
Цитата:
2 бегина, 2 case и 4 енда. всё как надо....... |
|
#4
|
|||
|
|||
|
Цитата:
удалил CloseFile(f) и компилируется теперь, но в файл не записывается. при попытке сгенировать повторно: ошибка i/o error 32 |
|
#5
|
||||
|
||||
|
Верните всё на место и перенесите в локальную var секцию данной процедуры вот это
Код:
... var i: byte; f: TextFile; key: array[0..9] of byte; ... |
|
#6
|
|||
|
|||
|
Цитата:
Спасибо, воспользовался TFileStream. Дальше в проге ошибка в другом месте. Хочу прочитать файл до конца так что бы если файл не кратен 8 байтам, остальные байты обнулялись. пишу цикл Код:
sizefile8:=filesize(OpenFile) div 8 + 1;
for ifile:= 0 to sizefile8 do //ОШИБКА ТУТ
begin //1
if ifile<sizefile8 then
for round:=0 to 7 do
begin //2
BlockRead(OpenFile,buf8,1);
b8in[round]:=buf8;
end //2
else begin //4
round:=filesize(openfile)-(sizefile8*8);
for s:=0 to round do
begin //3
BlockRead(OpenFile,buf8,1);
b8in[s]:=buf8;
end; //3
for s:=s to 7 do
begin
BlockRead(OpenFile,buf8,1);
b8in[s]:=buf8;
end;
end; //4
.............................
............................
...........................
end; //1и при компиляции ошибка [dcc32 Error] Unit1.pas(121): E2032 For loop control variable must have ordinal type |
|
#7
|
||||
|
||||
|
Оффтоп:
FileStream хорош именно для обработки файлов - разрезать/слить, что-то ещё добавить или поменять в нём местами, для просто считывания блоков данных, тем более текстовых, использовать данный класс не совсем рационально (есно имхо), это равносильно как в ворде записки односложные баттонить - возможностей навалом, а используется лишь мелочевка И обычным способом можно отслеживая указатель EOF, в данном случае это filesize(f), только нужно проверять оставшиеся до конца файла байты - если их больше размера блока то считываем его полностью, а если меньше то добираем остаток побайтно, а оставшееся не трудно заполнить и нулями |