Fórum Aspas #333745

25/11/2006

0

Tenho uma string assim

[b:5fda925afd]´no,me´,´sobre,nome´[/b:5fda925afd]

estou usando o StringReplace para substituir a [b:5fda925afd],[/b:5fda925afd] por | mas só quero substituir o que só está fora das aspas já que a [b:5fda925afd],[/b:5fda925afd] de [b:5fda925afd]no,me[/b:5fda925afd] e [b:5fda925afd]sobre,nome[/b:5fda925afd] está dentro das aspas!

Alguem poderia me dizer como fazer isso?

Quero que fique assim:

[b:5fda925afd]´no,me´|´sobre,nome´[/b:5fda925afd]


Rudá

Rudá

Responder

Posts

25/11/2006

Marco Salles

a partir do delphi 7.0 voce pode usar o PosEx

function StringReplaceEx(var Texto:String):String; var P,D:integer; begin P:=pos(´´´,texto); while p > 0 Do begin D:=PosEx(´´´,texto,P+1); if D-P=2 then texto[P+1]:=´|´; p:=D; end; result:=Texto; end;



Responder

Gostei + 0

25/11/2006

Rudá

Sim isso eu vi mas fiz outro teste e não funcionou
ele nunca vai ser sempre esse que eu falei, pode ser de qualquer jeito!
Coloquei isso [b:fbd8bc2337]´no,me´,,´sobre,nome´[/b:fbd8bc2337] e não mudou nada!


Responder

Gostei + 0

26/11/2006

Marco Salles

Ruda meu amigo , vamos com calma...

inicialmete Voce me passou isto [b:6fe63ce35f]´no,me´,´sobre,nome´ para ser transF em : ´no,me´|´sobre,nome´[/b:6fe63ce35f] Ai eu fiz este algoritmimo que atende a situação , para Substituir todas as Virgulas que estão entre duas aspas seguidas... Porque , pelo que tudo indica era este o seu problema inicial Porém voce testou com isso: [b:6fe63ce35f]´no,me´,,´sobre,nome´ [/b:6fe63ce35f]


[color=darkred:6fe63ce35f][b:6fe63ce35f]é claro que não vai ocorrer nada , pois pela logica empregada nesse caso não vai ter duas Aspas seguidas separadas por uma virgula...[/b:6fe63ce35f][/color:6fe63ce35f]

Pra se ter um resposta logica é preciso que set tenha uma pergunta logica..

Não da para saber a diferença de :

´no,me´,,´sobre,nome´ de ´no,me´,A,´sobre,nome´ OU ´no,me´,AB,´sobre,nome´ OU ´no,me´,ABC,´sobre,nome´ etc...

Sem que se defina algum[b:6fe63ce35f] crietério [/b:6fe63ce35f]logico


entende-se que voce esta carregando algo de algum lugar para outro lugar , aonde se usou a virgula para separar as strings... e esta virgula voce na hora da importação quer substituir pelo |... Porem o texto ou conteudo que se esta importando deve ter uma lógica , senão não tem muito o que fazer ,


Posso te fornecer também um algoritimo que troque todas as virgulas entre duas aspas por |

assim:

´no,me´,,,,,,,,,,,,,,´sobre,nome´ por ´no,me´|´sobre,nome´ ou ´no,me´|||||||||||´sobre,nome´ ;


mas acho que não da para fazer muita coisa quando se tem outros caracteres envolvidos entre essas Virgulas.. Por exemplo
[b:6fe63ce35f]´no,me´,,,,,A,,,,,,,,´sobre,nome´ [/b:6fe63ce35f] , a não ser que voce defina , que algo que de para tratar isto... com por exemplo situação que se iniciar com virgula etc...


Responder

Gostei + 0

27/11/2006

Marco Salles

com eu disse antes um algoritimo para trocar todas as virgulas entre duas aspas pelo | , pode ser :

function StringReplaceEx(var Texto:String):String; var P,D,V,U,i:integer; begin u:=0; P:=pos(´´´,texto); while p > 0 Do begin D:=PosEx(´´´,texto,P+1); v:=posEx(´,´,texto,P+1); U:=V; While V-P = 1 do begin P:=V; v:=posEx(´,´,texto,v+1); end; if D - P =1 then for i:=U to D-1 do texto[i]:=´|´; p:=D; end; result:=Texto; end;


Porem , ele so tem condiçoes de trocar se entre essas duas aspas tiver somente o caracter Virgula

Assim por exemplo:

´,´,´,d´,K..,´,´´,´,,,,,,,´ ele troca por : ´|´|´,d´,K..,´|´´|´|||||||´


porem caso necessite que no lugar de tantas virgulas aparecre somente
um Unico | , com pouca modificação se consegue...

Emfim , no inicio me confundi um pouco quando voce disse que ja tinha tentando com o StringReplace e não tinha conseguido...
No caso de querer trocar uma unica virgula entre duas aspas ´,´ por ´|´ não precisa do algoritimo anterior , a função[b:dd58382603] StringReplace citada por voce , bem como a função AnsiReplaceStr(texto,´´,´´,´´|´´)[/b:dd58382603] , dara conta do recado..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar