Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Форматирование строки


Автор: CynicRus 30.7.2012, 11:29
Приветствую уважаемых форумчан. Требуется строку S - разбить на равные участки, и в каждый участок строки добавить символы ' + и перевести каретку на следующую строку. Попытался выполнить следующим образом:
Код

var
s,s1: string;
p: integer;
begin
 s:=''; s1:='';
s:=smb.img.imgcode;
         s1:=#39;
          for p:=0 to Length(s)-1 do begin
            SetLength(s1,Length(s1)+1);
            s1[Length(s1)]:=s[p];
            if p<>0 then begin
             if ((P/20)=trunc(P/20)) then
              begin
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:='+';
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#13;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#10;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              end;
             if P = Length(s) then
              begin
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              end;
            end;
          end;                    
end;

 В принципе такая конструкция работает, и выдает в Synedit необходимый результат. Вот только этот результат не копируется оттуда. А в случае, если добавлять результат работы кода в memo - там отображается только первый символ из s1. Собственно - Каким образом можно данную проблему решить?

Автор: northener 30.7.2012, 12:15
А что такое 
Код

smb.img.imgcode
?

Автор: CynicRus 30.7.2012, 13:01
Это собственно строка, выглядящая примерно как:
Код

deNq9kltOwlAURe80TJiFU2AsToGpC EYNRKNUYnwUKWp8RI0aQUGNr2gUUhWcRDnpTg8n3vbyc8LOStuPvVf6mj E5E4bhvN9Roeh31airUdq712Kh8aDFYvCoxVJTjeX9Jy3KB89TxhgzsVM5fHFj 4kRzOBtHc+Xo1

Соответственно - эту строку я получаю на вход(или аналогичную ей, произвольной длинны),
а мне из неё надо сделать нечто вроде:
Код

' deNq9kltOwlAURe80TJiFU2AsToGpC EYNRKNUY' +
 'nwUKWp8RI0aQUGNr2gUUhWcRDnpTg8n3vbyc' +
 '8LOStuPvVf6mj E5E4bhvN9Roeh31airUdq712K ' +
 '31airUdq712Kh8aDFYvCoxVJTjeX9Jy3KB89Txhg' +
 'zsVM5fHFj 4kRzOBtHc+Xo1' 

Автор: northener 30.7.2012, 13:21
Цитата(CynicRus @  30.7.2012,  13:01 Найти цитируемый пост)
Это собственно строка, выглядящая примерно как

Примерно?
А точно как?
Я это к тому, что подозреваю, что эта строка содержит "непечатные" символы. Т.е. её нельзя поместить в Мемо, а следовательно и нельзя с ней работать через Copy/Paste. Так что "разбить на части" эту строку вы сможете без проблем равно как и поместить нужные символы в любое её место. Но "правильно увидеть глазами" результат не сможете.

Автор: CynicRus 30.7.2012, 13:29
Ну я не могу сказать, как она генерируется точно, потому как она генерируется в другом приложении. Выглядит как BASE64 строка. Хм, однако - если копировать строку без моего форматирования из memo - она замечательно копируется, так что я подозреваю - что это у меня что-то не совсем так.

PS: плюс мне без копирования полученного - совсем никак-(

Автор: northener 30.7.2012, 13:45
Цитата(CynicRus @  30.7.2012,  13:29 Найти цитируемый пост)
Выглядит как BASE64 строка.

Ну если это действительно BASE64, то дело конечно в другом.

Тогда смотрим код.
Скажите что есть s[p] при p = 0?

Автор: CynicRus 30.7.2012, 13:56
Первый символ строки S собственно.

Автор: northener 30.7.2012, 14:01
Цитата(CynicRus @  30.7.2012,  13:56 Найти цитируемый пост)
Первый символ строки S собственно. 

Строки индексируются с 1. Так что первый символ строки это s[1].

Автор: CynicRus 30.7.2012, 14:21
Код

s:=smb.img.imgcode;
         s1:=#13#10+#39;
          for p:=0 to Length(s)-1 do begin
            SetLength(s1,Length(s1)+1);
            s1[Length(s1)]:=s[p+1];
            if p<>0 then begin
             if ((P/20)=trunc(P/20)) then
              begin
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:='+';
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#13;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#10;
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              end;
             if P = Length(s) then
              begin
              SetLength(s1,Length(s1)+1);
              s1[Length(s1)]:=#39;
              end;
            end;
          end;                 
 - и все заработало. Большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)