Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
7-36853
Максим
2003-10-08 08:45
2003.12.12
Помогите !!!!!


3-36531
IGray
2003-11-20 23:31
2003.12.12
Упредить


3-36510
Hooch
2003-11-21 11:43
2003.12.12
Quantum Grid 4.5


4-36892
Mantic0re
2003-10-17 01:19
2003.12.12
Глупая проблема с ToolBar..


6-36785
LOGic
2003-10-15 14:57
2003.12.12
Уважаемые мастера !! вот с такой проблемой столкнулся нужно по PO