Текущий архив: 2003.12.12;
Скачать: CL | DM;
Вниз
Работа со строкой Найти похожие ветки
← →
SDW_syscoder © (2003-12-01 09:56) [0]Нужна функция, которая удаляет в строке тетрады [3030], стоящие на нечётных позициях
[ 3030 3930 3030 3936 3030 3933 3030 3841 3030 3835 3030 ]
(тетрады разбиты пробелыми для наглядности).
Поиск и замена в строке не получится, если присмотритесь, то увидите.
← →
Digitman © (2003-12-01 09:59) [1]В чем проблема написать такую ф-цию ?
← →
Романов Р.В. © (2003-12-01 10:02) [2]Очень даже получится
← →
Maxud © (2003-12-01 10:11) [3]Первое, что пришло на ум, надо проверять (писАл прямо здесь).
var i, k: integer;
s: string;
begin
s := "3030 3930 3030 3936 3030 3933 3030 3841 3030 3835 3030";
i := 1;
while i < Length(s) do
begin
if Copy(s, i, 4) = "3030" then
for k := 1 to 4 do s[i+k] := "%";
inc(i, 4*2);
end;
StringReplace(s, "%%%%", "", [rfReplaceAll]);
end;
← →
TUser © (2003-12-01 10:23) [4]>[3]
А если там окажется последовательность %%%%? Лучше так
var i, k: integer;
s: string;
begin
s := "3030 3930 3030 3936 3030 3933 3030 3841 3030 3835 3030";
i := 1;
while i < Length(s) do
begin
if Copy(s, i, 4) = "3030" then
delete(s,i,4);
else inc(i, 4*2);
end;
end;
> Maxud © (01.12.03 10:11) [3]
← →
SDW_syscoder © (2003-12-01 10:32) [5]// TUser
// А если там окажется последовательность %%%%?
Такой последовательности быть не может, т.к. это кодированная информация и последовательность строгая => тетрады "3030" надо удалять, а допустим "3930" преобразовать в ASCII-код, т.е. [P](англ).
← →
Maxud © (2003-12-01 10:37) [6]
> TUser © (01.12.03 10:23) [4]
delete(s,i,4) - нельзя, т.к. строка сдвигается и "стоящие на нечётных позициях" сменят свою позицию.
← →
Maxud © (2003-12-01 10:40) [7]
> SDW_syscoder © (01.12.03 10:32) [5]
Что-то типа этого:
var s2: string[2];
...
s2 := Chr(StrToInt(Copy(s, 1, 2))) + Chr(StrToInt(Copy(s, 3, 2)));
← →
Anatoly Podgoretsky © (2003-12-01 10:42) [8]Это очень старая история, автор уже задавал этот вопрос и получил ответ.
← →
SDW_syscoder © (2003-12-01 10:52) [9]> Maxud © (01.12.03 10:40) [7]
Так вот в чём ещё небольшая проблема, Функция Chr(..) преобразует , допустим, код "$93" в "“", а должен в русскую "У". По-моему это зависит от выбора кодовой страницы.
← →
Maxud © (2003-12-01 11:00) [10]Chr(HexToInt("$93"));
← →
TUser © (2003-12-01 11:05) [11]
> "стоящие на нечётных позициях" сменят свою позицию.
Ну, тоже - не велика проблема. i надо инкременировать на 1 или на 2 в зависимости от того, удаляли ли мы чего-нибудь. Не учел, каюсь.
← →
SDW_syscoder © (2003-12-01 11:09) [12]Ну, ладно. Благодарю всех за предоставленную помощь, Я побежал в технарь учиться, а то уже опаздываю.
← →
TUser © (2003-12-01 11:47) [13]
> на 1 или на 2
Пардон, на 4 или на 8, конечно.
Страницы: 1 вся ветка
Текущий архив: 2003.12.12;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c