|
|
Регистрация | << Правила форума >> | 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), только нужно проверять оставшиеся до конца файла байты - если их больше размера блока то считываем его полностью, а если меньше то добираем остаток побайтно, а оставшееся не трудно заполнить и нулями Я не понял Вашего вопроса, но всё же Вам на него отвечу! |