Problema com loop !!!!
Cod:
LBArquivos:
Parte da string:
O problema é o seguinte:
O usuario colocou a orden do LBArquivos oposta a da string, o no meu cod. so
alteraria a 1ª linha da string alguem sabe como que posso resolver isso ?????
LBArquivos:
Parte da string:
O problema é o seguinte:
O usuario colocou a orden do LBArquivos oposta a da string, o no meu cod. so
alteraria a 1ª linha da string alguem sabe como que posso resolver isso ?????
Guilherme
Curtidas 0
Respostas
Rjun
30/08/2005
Eu não consegui entender o pq q so alteraria a 1ª linha. Você não esta procurando por todo o html?
GOSTEI 0
Massuda
30/08/2005
Fiquei com a impressão que você quer trocar o ¬20 que tem no nome do arquivo por espaço... normalmente, isso quem faz é o navegador quando vai decodificar a url... Se não for isso, estou como o Rogério, sem entender qual a lógica de trocar apenas a primeira linha.
GOSTEI 0
Guilherme
30/08/2005
pq tipo o primeiro ´registro´ do LBArquivos nao da certo na string ne ai ele vai para o 2ª ai sim deu certo ai substitui so ki o 1º registro do LBArquivos ki dah certo na 2º linha do html jah fico para traz e o loop acabou !!!
GOSTEI 0
Guilherme
30/08/2005
Fiquei com a impressão que você quer trocar o ¬20 que tem no nome do arquivo por espaço... normalmente, isso quem faz é o navegador quando vai decodificar a url... Se não for isso, estou como o Rogério, sem entender qual a lógica de trocar apenas a primeira linha.
a principio era so o nome do arquivo sem caminho so que ai entrou mais coisas tipo o cid: o cod ki completo para fazer a alteraçao eh esse :
var Htm,Newarq : TStringList; I, J, l, t: Integer; PosIni: Integer; PosFim: Integer; ContaCaract: Integer; MeuTexto: string; MinhaFrase,resultado: string; begin Htm:=TStringList.Create; Newarq:=TStringList.Create; Htm.LoadFromFile(edtlocal.Text); for J := 0 to Htm.Count-1 do begin MeuTexto := htm[J]; //não pra colocar "I" no Lines e sim "J" era Memo1.Lines[I]; if Pos(´src="´, MeuTexto) > 0 then //Linha adicionada begin PosIni := Pos(´src="´, MeuTexto) + 5; ContaCaract := 0; for I := PosIni to Length(MeuTexto) do begin if MeuTexto[I] = ´"´ then // fim da src begin MinhaFrase := Copy(MeuTexto, PosIni, ContaCaract); for t := 0 to LBArquivos.Lines.Count-1 do if Pos(ExtractFileName(LBArquivos.lines[t]),MeuTexto) <> 0 then begin resultado:=´cid:´+LBArquivos.lines[t]; Newarq.Add(StringReplace(MeuTexto, MinhaFrase, resultado, [])); LBArquivos.lines.Delete(t); end; end; Inc(ContaCaract); end; end else //else adicionado begin Newarq.Add(htm[J]); Continue; end; end; end;
GOSTEI 0
Massuda
30/08/2005
O problema é que você está deletando itens do LBArquivos enquanto percorre os itens o LBArquivos... nesse tipo de situação, percorra a lista de itens de trás para frente, caso contrário você acaba deixando de percorrer alguns itens da lista...
... for t := LBArquivos.Lines.Count-1 downto 0 do if Pos(ExtractFileName(LBArquivos.lines[t]),MeuTexto) <> 0 then begin resultado:=´cid:´+LBArquivos.lines[t]; Newarq.Add(StringReplace(MeuTexto, MinhaFrase, resultado, [])); LBArquivos.lines.Delete(t); end; end; ...
GOSTEI 0
Guilherme
30/08/2005
mais i se o usuario colocar na orden certa ???? o usuario nao sabe de nada ele so quer adicionar os arquivos ali e enviar o e-mail agora si tipo eu nao verificar si ali eh o lugar certo o e-mail vai sair tudo fora de ´orbita´ intao tenho ki arrumar um jeito dele zerar a variavel do loop e começar d novo ate o lbarquivos ficar vazio !!!!
GOSTEI 0
Massuda
30/08/2005
...vai sair tudo fora de ´orbita´ intao tenho ki arrumar um jeito dele zerar a variavel do loop e começar d novo ate o lbarquivos ficar vazio !!!!
Não entendi nada... pelo que vi no seu código para cada ´frase´ vai testar se tem algum item igual em LBArquivos, se tiver remove da lista; outra coisa que eu não entendi é porque remove da lista de LBArquivos, já que, a princípio, seria possível um mesmo arquivo aparecer mais de uma vez no texto.GOSTEI 0
Guilherme
30/08/2005
intao si eu nao excluir da lista como ki eu faço para substituir todos ?? pq nao to conseguindo nao dah certo !
GOSTEI 0
Massuda
30/08/2005
Assim me parece mais razoável...Retirei seus comentários e anotei alguns erros que você deve/deveria saber como tratar.
... for J := 0 to Htm.Count - 1 do begin MeuTexto := htm[J]; if Pos(´src="´, MeuTexto) > 0 then begin PosIni := Pos(´src="´, MeuTexto) + 5; ContaCaract := 0; for I := PosIni to Length(MeuTexto) do begin if MeuTexto[I] = ´"´ then begin Break; end; Inc(ContaCaract); end; if ContaCaract > 0 then begin MinhaFrase := Copy(MeuTexto, PosIni, ContaCaract); for t := 0 to LBArquivos.Lines.Count - 1 do begin if Pos(ExtractFileName(LBArquivos.lines[t]), MeuTexto) <> 0 then begin resultado := ´cid:´ + LBArquivos.lines[t]; Newarq.Add(StringReplace(MeuTexto, MinhaFrase, resultado, [])); Break; end; end; // pode acontecer de não encontrar MinhaFrase em LBArquivos end else begin // se o HTML estiver errado, pode acontecer de ContaCaract = 0 end; end else begin Newarq.Add(MeuTexto); end; end; ...
GOSTEI 0
Guilherme
30/08/2005
refis o cod e deu certo ....
vlw ai todo mundo mais so resumindo nao tava dando certo por falta de um break !!!!![/code]
var
Htm,Newarq : TStringList;
lhtml,LAcharFinal,Larq: Integer;
PosIni: Integer;
PosFim: Integer;
ContaCaract: Integer;
MeuTexto: string;
MinhaFrase,resultado: string;
begin
for LHtml := 0 to Htm.Count -1 do begin
MinhaFrase:= htm[LHtml];
if pos(´SRC="´,UpperCase(MinhaFrase)) <> 0 then begin
PosIni:=pos(´SRC="´,UpperCase(MinhaFrase)) + 5;
ContaCaract:=0;
for LAcharFinal := PosIni to length(MinhaFrase) do begin
if MinhaFrase[LAcharFinal] = ´"´ then begin {eh o fim do texto dentro das aspas}
MeuTexto:= copy(MinhaFrase,PosIni,ContaCaract);
MeuTexto:=StringReplace(MeuTexto,´¬20´,´ ´,[rfReplaceAll]);
MinhaFrase:=StringReplace(MinhaFrase,´¬20´,´ ´,[rfReplaceAll]);
for Larq := 0 to LbArquivos.Lines.Count -1 do
if Pos(ExtractFileName(LbArquivos.Lines[Larq]),MeuTexto) <> 0 then begin
resultado:=´cid:´+ LbArquivos.Lines[Larq];
Newarq.Add(StringReplace(MinhaFrase,MeuTexto,resultado,[rfReplaceAll]));
resultado:=´´;
Break;
end; {1º if dentro do loop Larq}
Break;
end else {si ainda nao cababo o texto dentro das aspas intao}
Inc(ContaCaract)
end; {2º laço for tag >> for LAcharFinal := PosIni to length(MinhaFrase) do begin }
end else begin {end da 1º compareçao "if" }
Newarq.Add(Htm[Lhtml]);
Continue;
end; {end do else}
end ; {end do 1º laço for referente a tag >> for LHtml := 0 to Htm.Count -1 do begin}
end;
vlw ai todo mundo mais so resumindo nao tava dando certo por falta de um break !!!!![/code]
GOSTEI 0