Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
ВнизКак считать строку из typed файла? Найти похожие ветки
← →
Glex © (2006-05-01 23:20) [0]С обычными read, readln проблема следующая:
Если в исходном файле есть строка с leading/trailing spaces, то read и readln считывают не строку, как она есть, а trim"нутую строку.
Исходные коды посмотреть не могу, т. к. функции просто зашиты в компилятор :(
subj
← →
Mr tray (2006-05-02 00:02) [1]Мэй. Я ничё не понял :(
← →
Glex © (2006-05-02 00:16) [2]Mr tray.
Перечитай или объясни что не понял конкретнее.
Кстати, что такое "Мэй"?
← →
palva © (2006-05-02 00:59) [3]> Перечитай или объясни что не понял конкретнее.
Непонятно, что такое readln для typed файла.
Непонятно как вам удалось при чтении trim"нуть строку.
← →
Rial © (2006-05-02 01:12) [4]Заводишь буфер.
Читаешь туда по 64 КБ (или любая степень двойки,
начиная примерно с 12-й), пока не конец файла.
Из буфера читаешь посимвольно и анализируешь:
конец строки - #10, #13 или #10#13.
Работать, кстати говоря, будет быстврее, чем стандартные ReadLn и Read.
Заодно, будут читаться и длинные строки.
← →
Glex © (2006-05-02 18:35) [5]Rial
Спасибо!
Я так понял BlockRead оптимальнее всего. Или лучше потоки?
← →
Glex © (2006-05-02 18:48) [6]palva
1) Файлы бывают
typed, text, and untyped.
text - это file of char, т.е он typed.
если файл объявлен просто как file, то он untyped(с неуказанным типом, или нетипизированный).
Вы правы, читать Readln"ом можно только из text.
Опечатался, хотел написать не typed, а text.
2) Попробуйте, например, считать такой textfile:
" 3 spaces to left"
В считанной строке будет "3 spaces to left" вместо " 3 spaces to left".
Следовательно, процедура Readln не просто считывает строку из textfile"а, как сказано в хелп (Reads a line of text from a file.), а ещё делает с ней trim.
---------------------------------------------------
Блин, жалко, что исходников процедуры нету =(
Я так и не нашёл в хелпе, как делать процедуры с произвольным ([]) числом параметров
← →
Anatoly Podgoretsky © (2006-05-02 19:10) [7]Я так и не нашёл в хелпе, как делать процедуры с произвольным ([]) числом параметров
(const array of const);
← →
palva © (2006-05-02 23:08) [8]Glex © (02.05.06 18:48) [6]
> text - это file of char
Ну это у Вирта, в стандарте паскаля.
А в делфи это разные вещи.
> 2) Попробуйте, например, считать такой textfile:
Я попробовал на Win2000 D7
{$APPTYPE CONSOLE}
var
f: Text;
s: String;
Begin
AssignFile(f, "tttt1");
Rewrite(f);
Writeln(f, " 3 spaces to left");
Reset(f);
ReadLn(f, s);
Writeln("***"+s+"***"); // *** 3 spaces to left***
CloseFile(f);
End.
Не тримится. Видно не судьба.
← →
Rial © (2006-05-02 23:20) [9]
> Я так понял BlockRead оптимальнее всего. Или лучше потоки?
Лучше
Var FileId:THandle;
....
FileId:=FileOpen(FileName,***);
If (FileId=-1)then ... //не помню как константа называется
Try
...
Finally
FileClose(FileId);
end;
Либо CreateFile(..). Но тут слишком много параметров для начала.
*** fmOpenRead fmOpenWrite, и т.д., перейди по ссылке на эти
константы, а там еще есть. И F1.
Все равно BlockRead использует этот же метод, но
чуть медленнее.
К тому же с файлом, открытым средствами Reset(...),
сложнее обращаться, ИМХО.
← →
Rial © (2006-05-02 23:27) [10]
> Anatoly Podgoretsky © (02.05.06 19:10) [7]
> (const array of const);
У меня глупый вопрос, а каким образом влияет на производительность
объявление Const Array Of Const ... в процедуре ?
Т.е. почему этот вариант оптимальнее, чем просто "Array Of Const" ?
← →
Германн © (2006-05-03 02:16) [11]
> Rial © (02.05.06 23:27) [10]
>
>
> > Anatoly Podgoretsky © (02.05.06 19:10) [7]
>
>
> > (const array of const);
>
>
> У меня глупый вопрос, а каким образом влияет на производительность
> объявление Const Array Of Const ... в процедуре ?
> Т.е. почему этот вариант оптимальнее, чем просто "Array
> Of Const" ?
Ну, например потому, что избавляет компиллятор от излишних раздумий о возможности тех или иных манипуляций с данным массивом. В этом варианте разработчик берёт на себя всю ответственность!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c