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:
1 | function ContaOcorrencias(S, Ocorrencia: string): Integer; |
CTRL + SHIFT + C pra ele criar, e substitui do begin até o end por isso:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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:
1 | 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:
1 2 | Aux: array of string; Cont: Integer; |
Depois a procedure:
1 | procedure SeparaPalavras(Palavra: String); |
Substitui do begin ao end por isso aqui:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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:
1 2 3 4 5 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 | 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
1 2 3 4 5 6 7 | S recebe minha string; Cont := ContaOcorrencias(S, ',') + 1; SetLength(Aux, Cont); showmessage(SeparaPalavras(S,',')); |
Abs
Gostei + 0
31/10/2013
Thiago Irrazabal
1 | function SeparaPalavras(Palavra: String; S: String = ','): String; |
Depois mude a função para isso e veja se funciona.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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:
1 2 3 | 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:
1 2 | Palavra: array of string; Cont: Integer; |
Depois declara a function:
1 | function SeparaPalavras(Palavra: String; S: String = ','): TArrayString; |
Depois substitui por isso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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:
1 2 3 4 5 6 7 8 | 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 :
1 2 | if resultado da busca = meu código begin end; |
Assim vai funcionar?
Gostei + 0
31/10/2013
Thiago Irrazabal
tipo :
1 2 | if resultado da busca = meu código begin end; |
Assim vai funcionar?
Vai mas tem que ser dentro do FOR
1 2 3 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 :)