Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизГлюк ord на символе 26. Найти похожие ветки
← →
promomix (2006-02-03 02:21) [0]Привет. Такая проблемма, пытаюсь перевести строку:
For i := 1 to Length(koi) do
begin
postr := ord(koi[i]);
result := result+" "+IntToStr(postr);
end;
Но, если в строчке(koi), появляеться символ с кодом 26, то процедура останавливаеться :/ всымле яко бы этот символ последний. В чём проблема, а главное как исправить?
← →
promomix (2006-02-03 02:36) [1]Вот конкретный пример код, который неработает, если в строчке имееться символ "26":
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
koi:string;
CFile:textfile;
function koi_8(koi:string):string;
var i:integer;
var postr:integer;
begin
For i := 1 to Length(koi) do
begin
postr := ord(koi[i]);
result := result+" "+IntToStr(postr);
end;
end;
begin
AssignFile(CFile,"dig.cry");
Reset(CFile);
ReadLn (CFile,koi);
CloseFile(CFile);
writeln(koi); //без ord"a
writeln(koi_8(koi)); //с ord"ом
readln;
end.
P.S. содержимое dig.cry:
"\Ыю6K8Љ#Џ"
или
"26 348 3547 1534 54 843 24 56 4234 35 2447 26 26 26 26 26"
← →
ЮЮ © (2006-02-03 03:29) [2]Негоже рассматривать файл, содержащий "непечатные" символы, как textfile и пользоваться ReadLn
← →
ЮЮ © (2006-02-03 04:57) [3]
> то процедура останавливаеться
Процедура не останавливается, просто в строке нет тех символов, что ты ожидаешь (она короче).
procedure TForm1.Button1Click(Sender: TObject);
var
koi: string;
i, postr: integer;
begin
koi := #20#21#22#23#24#25#26#27#28#29;
Caption := "";
for i := 1 to Length(koi) do
begin
postr := ord(koi[i]);
Caption := Caption + " " + IntToStr(postr);
end;
end;
← →
promomix (2006-02-03 05:56) [4]ЮЮ © (03.02.06 04:57) [3]
Непонимаю,
"просто в строке нет тех символов, что ты ожидаешь (она короче)."
Как это понимать?
Код кстатьи ничем не отличаеться от того, что я привёл, его смысла тут я тоже не понимаю =/
← →
КаПиБаРа © (2006-02-03 07:16) [5]promomix (03.02.06 2:21)
появляеться символ с кодом 26
Этот символ в текстовых файлах означает перевод строки, т.е. у тебя строка читается только до этого символа. Что бы обработать остальной текст нужно читать строки в цикле. Если это не текстовый файл, т.е. в нем встречаются другие непечатные символы нужно работать с ним как с нетекстовым.
← →
ЮЮ © (2006-02-03 07:24) [6]
> его смысла тут я тоже не понимаю
Смысл в том, что если символ #26 в строке есть, то процедура его выведет, а не "остановится", как говоришь ты. дело просто с том, что никакого симвла #26 в твоей строке нет и быть не может (см.[5])
← →
TUser © (2006-02-03 09:46) [7]Дело в том, что readln ри чтении из файла принимает символ 26 за конец строки. Т.к. в текстовом файле такого символа не должно быть (по мнению разработчиков). Конец строки не читается, и результат функции length() будет не тем, которого ты ожидаешь.
← →
begin...end © (2006-02-03 10:12) [8]Я, конечно, извиняюсь, но 26 -- это не перевод строки, а признак конца файла (cEOF).
← →
promomix (2006-02-03 10:30) [9]а, теперь ясно. действительно больше похоже на cEOF.
подскожите как это обойти, желательно кодом на основе выше приведённого. спасибо за ответы.
← →
SergP. (2006-02-03 12:48) [10]
> promomix (03.02.06 10:30) [9]
> а, теперь ясно. действительно больше похоже на cEOF.
> подскожите как это обойти, желательно кодом на основе выше
> приведённого. спасибо за ответы.
Если тебе нужно полностью прочитать содержимое файла в переменную string, то:
function LoadFromFile(const Filename:string):string;
var
SizeStr:integer;
begin
with TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) do
try
SizeStr := Size - Position;
SetString(Result, nil, SizeStr);
Read(Pointer(Result)^, SizeStr);
finally
Free;
end;
end;
← →
promomix (2006-02-03 19:00) [11]SergP. (03.02.06 12:48) [10]
Неподходит. =(
Мне нужно считывать строчку, передавать считанные данные ф-цие кои_8. Далее следующую строчку, и тд.
← →
Desdechado © (2006-02-03 19:13) [12]чем не подходит-то?
У тебя будет строка длиной во весь файл, крути ей, как хочешь
← →
SergP © (2006-02-03 20:18) [13]
> promomix (03.02.06 19:00) [11]
> SergP. (03.02.06 12:48) [10]
> Неподходит. =(
> Мне нужно считывать строчку, передавать считанные данные
> ф-цие кои_8. Далее следующую строчку, и тд.
В таком случае что называется строкой в файле, где присутствуют #26 ???
← →
Anatoly Podgoretsky © (2006-02-03 21:33) [14]Это не текстовый файл!
← →
SergP © (2006-02-03 22:40) [15]
> Anatoly Podgoretsky © (03.02.06 21:33) [14]
> Это не текстовый файл!
А что же тогда такое "строка" в не текстовом файле?
← →
Германн © (2006-02-04 01:50) [16]
> SergP © (03.02.06 22:40) [15]
Ты не туда выстрелил. АП как раз подтведил твои (и не только твои) высказывания.
Хотя тут можно и поспорить. :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c