Fórum Copiar string dentro de outra string #459862
30/10/2013
0
Seria assim
tenho uma string com alguns códigos, separados por ponto e virgula e espaço, sem limite de caracteres.
SCOROO, INTE, CABOCLO, ESOM, INTE, EDUCACAO, BOTICA, COSTAS, 0038, LUCR, INTE, CHEVE, ESPELHO, TODO, BETH, FEVA,
Reparem que o código " INTE'" aparece 3 vezes
Quero percorrer essa string e se encontrar o código INTE, continuar até o fim para saber se tem mais ocorrência.
Obrigado
Pedro Vieira
Curtir tópico
+ 0Posts
30/10/2013
Thiago Irrazabal
Declare em public ou private da tua unit isso:
function ContaOcorrencias(S, Ocorrencia: string): Integer;
CTRL + SHIFT + C pra ele criar, e substitui do begin até o end por isso:
var
Cont: Integer;
begin
Cont := 0;
while Pos(Ocorrencia, S) > 0 do
begin
S := Copy(S, Pos(Ocorrencia, S) + Length(Ocorrencia), Length(S));
Inc(Cont);
end;
Result := Cont;
end;
Depois a chamada do código fica assim:
Variavel := ContaOcorrencias('SCOROO, INTE, CABOCLO, ESOM, INTE, EDUCACAO, BOTICA, COSTAS, 0038, LUCR, INTE, CHEVE, ESPELHO', 'INTE');
Lembrando que é só passar no primeiro parâmetro a "Frase" e no segundo o que tu quer que ele ache, ele vai contar quantos tem dentro da frase e te retornar um numero, espero ter ajudado.
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
30/10/2013
Pedro Vieira
Mais uma vez obrigado pela atenção...
Gostei + 0
30/10/2013
Thiago Irrazabal
Mais uma vez obrigado pela atenção...
Beleza, faz assim então, deixa essa função que eu te passei e vamos criar uma outra que vai precisar daquela.
Declara essas 2 coisas no private da tua unit:
Aux: array of string; Cont: Integer;
Depois a procedure:
procedure SeparaPalavras(Palavra: String);
Substitui do begin ao end por isso aqui:
var
I: Integer;
begin
for I := 0 to Cont - 1 do
begin
if Pos(',', Palavra) > 0 then
begin
Aux[I] := Copy(Palavra, 1, Pos(',', Palavra) - 1);
Palavra := Copy(Palavra, Pos(',', Palavra) + 1, Length(Palavra));
ShowMessage(Aux[I]);
end
else
begin
Aux[I] := Palavra;
Palavra := '';
ShowMessage(Aux[I]);
end;
end;
end;
Lembrando que o array Aux é quem vai guardar cada palavra... e aqui o "ShowMessage" é só para mostrar as palavras separadas.
Depois as chamadas dos códigos ficam assim:
Cont := ContaOcorrencias('SCOROO, INTE, CABOCLO, ESOM, INTE, EDUCACAO, BOTICA, COSTAS, 0038, LUCR, INTE, CHEVE, ESPELHO', ',') + 1;
SetLength(Aux, Cont);
SeparaPalavras('SCOROO, INTE, CABOCLO, ESOM, INTE, EDUCACAO, BOTICA, COSTAS, 0038, LUCR, INTE, CHEVE, ESPELHO');
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
30/10/2013
Pedro Vieira
Abs
Gostei + 0
31/10/2013
Pedro Vieira
Function SeparaPalavras(Palavra: String): String;
var I: Integer;
begin
for I := 0 to Cont - 1 do
begin
if Pos(',', Palavra) > 0 then
begin
Aux[I] := Copy(Palavra, 1, Pos(',', Palavra) - 1);
Palavra := Copy(Palavra, Pos(',', Palavra) + 1, Length(Palavra));
result:= Aux[I];
end
else
begin
Aux[I] := Palavra;
Palavra := '';
result:= Aux[I];
end;
end;
end;
coloquei em um botao assim
s:= minha string showmessage(SeparaHorarios(S,','));
Mas não recebo nada no result.
Voce sabe o porque isso acontece?
Gostei + 0
31/10/2013
Thiago Irrazabal
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
31/10/2013
Pedro Vieira
S recebe minha string; Cont := ContaOcorrencias(S, ',') + 1; SetLength(Aux, Cont); showmessage(SeparaPalavras(S,','));
Abs
Gostei + 0
31/10/2013
Thiago Irrazabal
function SeparaPalavras(Palavra: String; S: String = ','): String;
Depois mude a função para isso e veja se funciona.
Function SeparaPalavras(Palavra, S: String): String;
var I: Integer;
begin
for I := 0 to Cont - 1 do
begin
if Pos(S, Palavra) > 0 then
begin
Aux[I] := Copy(Palavra, 1, Pos(S, Palavra) - 1);
Palavra := Copy(Palavra, Pos(S, Palavra) + 1, Length(Palavra));
result:= Aux[I];
end
else
begin
Aux[I] := Palavra;
Palavra := '';
result:= Aux[I];
end;
end;
end;
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
31/10/2013
Deivison Melo
Exemplo:
[url]http://delphi.about.com/od/beginners/l/blrtlPos.htm[/url]
Abração e bons códigos!!
Gostei + 0
31/10/2013
Pedro Vieira
Abs
Gostei + 0
31/10/2013
Thiago Irrazabal
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
31/10/2013
Pedro Vieira
AssignFile(F,meuarquivo);
// inicializa para leitura
Reset(F);
while not EOF(F) do
begin
// lê a linha
ReadLn(F,linha);
S:= AnsiUpperCase(linha);
Cont := ContaOcorrencias(S, ',') + 1;
SetLength(Aux, Cont);
showmessage(SeparaPalavras(S ',','));
end;
CloseFile(F);
Att
Gostei + 0
31/10/2013
Thiago Irrazabal
Primeiro tu vai criar um "Objeto", sabe onde declara? depois de Type:
TArrayString = record
S: array of string;
end;
Dai tu vai declarar essas 2 coisas no private, tira o Aux: Array of string; lá do private:
Palavra: array of string; Cont: Integer;
Depois declara a function:
function SeparaPalavras(Palavra: String; S: String = ','): TArrayString;
Depois substitui por isso:
var
I: Integer;
Aux: array of string;
begin
SetLength(Result.S, Cont);
SetLength(Aux, Cont);
for I := 0 to Cont - 1 do
begin
if Pos(S, Palavra) > 0 then
begin
Aux[I] := Copy(Palavra, 1, Pos(S, Palavra) - 1);
Palavra := Copy(Palavra, Pos(S, Palavra) + 1, Length(Palavra));
Result.S[I] := Aux[I];
end
else
begin
Aux[I] := Palavra;
Palavra := '';
Result.S[I] := Aux[I];
end;
end;
end;
As chamadas de códigos ficaram assim:
Cont := ContaOcorrencias(S, ',') + 1;
SetLength(Palavra, Cont);
TArrayString(Palavra) := TArrayString(SeparaPalavras(S, ','));
for I := 0 to Cont - 1 do
ShowMessage(Palavra[I]);
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
31/10/2013
Pedro Vieira
tipo :
if resultado da busca = meu código begin
end;
Assim vai funcionar?
Gostei + 0
31/10/2013
Thiago Irrazabal
tipo :
if resultado da busca = meu código begin
end;
Assim vai funcionar?
Vai mas tem que ser dentro do FOR
for I := 0 to Cont - 1 do
if Trim(Palavra[I]) = teu código then
//O RESTO DO CÓDIGO
Lembrando que o Trim eu coloquei porque ele está deixando um espaço na frente das palavras, para corrigir isso pode mudar na função também, dai não será necessário colocar o Trim no IF.
var
I: Integer;
Aux: array of string;
begin
SetLength(Result.S, Cont);
SetLength(Aux, Cont);
for I := 0 to Cont - 1 do
begin
if Pos(S, Palavra) > 0 then
begin
Aux[I] := Trim(Copy(Palavra, 1, Pos(S, Palavra) - 1));
Palavra := Copy(Palavra, Pos(S, Palavra) + 1, Length(Palavra));
Result.S[I] := Aux[I];
end
else
begin
Aux[I] := Trim(Palavra);
Palavra := '';
Result.S[I] := Aux[I];
end;
end;
end;
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)