|
#1
|
|||
|
|||
аварийный выход
продолжаю самостоятельно осваивать Delphi. Написал программу, ошибок не выдаёт, но аварийно завершается. Наверное, что-то не понимаю в вариантах. помогите, кому не трудно.
Дан файл, надо цифры записать в memo1 , а буквы в memo2. Код:
procedure TForm1.Button1Click(Sender: TObject); var fi1:file; buf1:variant; chislo:chis; k1:integer; begin with od1 do if execute then e1.Text:=extractFiledir(od1.FileName)+filename; assignFile(fi1,od1.FileName); {$I-} reset(fi1,1); {$I+} k1:=0; repeat BlockRead(fi1, Buf1,sizeOf(buf1),k1); if VarIsEmpty(buf1)=false then if VarType(buf1) in chislo then red1.lines.Add(buf1) else if buf1<>' ' then red2.lines.Add(vartostr(buf1)); until (k1<>0) or (k1<>10); end; |
#2
|
|||
|
|||
В BlockRead в качестве буфера обычно передают массив либо выделенную область памяти (которую потом нужно освободить). А дальше этот массив уже можно побайтно разбирать, где там цифры, где буквы.
Вот тут описание BlockRead и пример чтения файла побайтно (неожиданная ссылка): http://www.delphisources.ru/pages/fa...kRead.php.html Проверить, что символ является цифрой: Код:
if AChar in ['0'..'9'] then... буквой: Код:
if AChar in ['a'..'z', 'A'..'Z'] then... |