 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Seg Nov 12, 2007 1:20 pm Assunto: Pos del copy alguem pode me ajudar? (Editado) |
|
|
Olá. pessoal Estou precisando de uma função que, dentro de um tmemo, separe tudo que esta Depois das 3 aspas e antes das 4 aspas, EX
'''R$300,oo''''
A funcao e a seguinte, tem que processar linha por linha, de um texto de vamos dizer 30 linhas em um tmemo onde existam varias informacoes como nome do produto, EX
Produto = Lampadas para carro, tipo tal, nome tal, Valor '''300,00''''
E no programa quando o cliente procurar EX, Lampada tal, saia so o valor, 300,00 e basicamente isso porque o resto ja consegui, ja procurei no forum vi varias formas, e tudo se resume no POS ja consegui tirar tudo, que ta antes, por ex ja consegui de '''300,00'''' o programa deixa '''300,00, mais so que as outras linhas de nome de produtos e outros dados, ele joga para o outro memo tambem, nao so o '''300,00 mais todas as linhas, E eu so quero o valor para o ooutro memo, no caso 300,00 Alguem pode me ajudar, ja fiz de tudo peguei varios codigos aqui no forum mais nao consegui adaptar, ja to a 1 semana nisso alguem pode me ajudar porfavor, |
|
| Voltar ao Topo |
|
 |
Proficenter Aprendiz

Registrado: Sexta-Feira, 9 de Novembro de 2007 Mensagens: 146
|
Enviada: Seg Nov 12, 2007 5:04 pm Assunto: |
|
|
Eu fiz esse exemplo de uma olhada e faça algo parecido dentro de um loop para pegar as linhas do memo, acho que deve te ajudar ele retira todos as aspas da linha.
procedure TForm1.Button1Click(Sender: TObject);
var
Str1 : String;
begin
Str1 := edit1.Text;
while (Pos('''', Str1) > 0) do
Delete(Str1, Pos('''', Str1) , 1);
Edit2.Text := Str1;
end; |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Ter Nov 13, 2007 2:52 pm Assunto: |
|
|
Ola Proficenter, sim e isso mesmo, e isso eu ja consegui, apagar as aspas, so que oq eu nao to conseguindo, e selecionar so oq ta dentro por ex.
Testo blalblabla
testo2
allgo aki
'''300,00''''
Ai eu quero que passe pra otro memo so o 300,00 sem aspas, mais nao so sem aspas e sim sem o texto que nao seja 300,00, no aguardo.
Obrigado pela ajuda amigo. |
|
| Voltar ao Topo |
|
 |
bdexterholland Novato

Registrado: Quinta-Feira, 15 de Junho de 2006 Mensagens: 13 Localização: Carangola (Onde???)
|
Enviada: Ter Nov 13, 2007 2:59 pm Assunto: |
|
|
| Código: |
var
numero : string;
begin
numero:= '''300,00''''; //sei lá se vai mandar com o nº de aspas certas
showmessage(copy(numero, 3,6);
end;
|
ou
| Código: |
var
numero, aux : string;
x : integer;
begin
aux := '';
x := 0;
numero:= '''300,00''''; //sei lá se vai mandar com o nº de aspas certas
while x < length(numero) do
begin
if numero[x] <> ''' then
aux := aux + numero[x];
inc(x);
end;
showmessage(aux);
end;
|
|
|
| Voltar ao Topo |
|
 |
Proficenter Aprendiz

Registrado: Sexta-Feira, 9 de Novembro de 2007 Mensagens: 146
|
Enviada: Ter Nov 13, 2007 4:30 pm Assunto: |
|
|
Segue ai entao um exemplo como vc pode pegar somente o valor entre as aspas. Mais vc deveria alterar o modo de fazer isso trabalhar com aspas eh pouco chato.
procedure TForm1.Button1Click(Sender: TObject);
var
Aux : String;
begin
Aux := Edit1.Text;
{ Coloca a aspa na posicao 1 }
Delete(Aux, 1, Pos('''', Aux));
{ Retira as outras aspas }
while (Pos('''', Aux) = 1) do
Delete(Aux, Pos('''', Aux), 1);
{ Retira os caracteres que estao atras das aspas }
Delete(Aux, Pos('''', Aux), Length(Aux));
Edit2.Text := Aux;
end;
Vc pode melhorar foi o que pensei rapidamente para poder ajudar.
Blz.. |
|
| Voltar ao Topo |
|
 |
forst Membro Junior


Registrado: Domingo, 26 de Junho de 2005 Mensagens: 367
|
Enviada: Ter Nov 13, 2007 4:30 pm Assunto: |
|
|
Boa tarde amigos,
acho que vcs estão complicando o que não é dificil...
Vc pode usar um copy junto com o pos pra pegar a posição certa que você quer...
em uma string vc coloca 2 aspas simples que corresponde a uma...
ex:
vStr := ''''''''; // é igual a '''
Olha este exemplo para você intender...
Cria 2 Edits.
no Edit1 vc coloca o texto: '''300,00''''
crie um botao:
| Código: |
procedure TForm1.Button1Click(Sender: TObject);
var vStr, vStr2 : string;
begin
vStr := ''''''''; // corresponde a '''
vStr2 := ''''''''''; // corresponde a ''''
Edit2.Text := Copy(Edit1.Text,Pos(vStr,Edit1.Text)+3,Pos(vStr2,Edit1.Text)-4);
end;
|
o resultado do Edit2 será 300,00
só implementar essa ideia nas linhas do seu memo...
Espero ter ajudado..
[]s _________________ Precisando de ícones para suas aplicações em Delphi?
www.soicones.com
Milhares de Ícones PNG de alta qualidade disponíveis em diversos tamanhos. |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Qua Nov 14, 2007 11:51 am Assunto: |
|
|
Ola pessoal ja ajudo muito mais nao resolveu, pq primeiro nao ta processando todas as linhas do memo, o seu exemplo forst servio perfeitamente porem nao processa todas as linhas, e ja que as aspas estao atrapalhando vamos por entao, tudo depois da / e antes da //
Alguem pode ajudar, que processe todas aslinhas do memo e nao copiem testo por ex
Produto tal talal
e isso e tal
valor /300,00//
que so copie para o memo 300,00 e nao produto tal tal e isso e tal valor etc. abraços e obrigado pela ajuda mesmo pessoal. |
|
| Voltar ao Topo |
|
 |
forst Membro Junior


Registrado: Domingo, 26 de Junho de 2005 Mensagens: 367
|
Enviada: Qua Nov 14, 2007 1:45 pm Assunto: |
|
|
Ae cara, blz?
bom, vc tem 2 memos, um deles tem isso por ex:
lalalal
asdad
'''300,00''''
asda
eeee
bcsd'''400,00''''
asdasd
entao no outro memo teria q aparecer somente:
300,00
400,00
é isso nao é?
entao vc usa a mesma ideia que eu postei antes.. soh utiliza uma rotina pra andar nas linhas desse seu memo...
Faça o seguinte..
substitua os 2 edits e coloque 2 memos...
no memo1 coloque o seu texto...
e no botao:
| Código: |
procedure TForm1.Button1Click(Sender: TObject);
var vStr,vStr2,Valor : string;
i , linhas : integer;
begin
vStr := '''''''';
vStr2 := '''''''''';
linhas := memo1.lines.count;
for i := 1 to linhas do
begin
Valor := Copy(memo1.lines[i],Pos(vStr,memo1.lines[i])+3,Pos(vStr2,memo1.lines[i])-4);
if valor <> '' then
memo2.lines.Add ( valor );
end;
end;
|
pronto..
qualquer coisa posta dnovo..
[]s _________________ Precisando de ícones para suas aplicações em Delphi?
www.soicones.com
Milhares de Ícones PNG de alta qualidade disponíveis em diversos tamanhos. |
|
| Voltar ao Topo |
|
 |
gustavocco Administrador

Registrado: Sexta-Feira, 6 de Fevereiro de 2004 Mensagens: 4253 Localização: Chapecó - SC
|
Enviada: Qua Nov 14, 2007 3:07 pm Assunto: |
|
|
Olá, agora q vi seu post da mensagem privada. Entao... eu nao to tendo mto tempo por aqui pra criar um exemplo completo, mas pelas respostas acima, acredito q lhe ajudaram bastante.
Ainda para vc ter uma idéia mais ampla sobre estes comandos indico:
http://www.delphibasics.co.uk/index.html nesse endereço, embora em ingles, vc encontra muitas funções (basicas, mas importantes) e exemplos de implementação.
Flw. |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Qui Nov 15, 2007 10:12 am Assunto: |
|
|
Ola forst , poxa mano valew mesmo nao sabe a quanto tempo tento isso, bom agora ja esta resolvido, muito obrigado mano. So que so um pouco principiante, voce poderia da uma explicada nos passos que voce fez para que eu possa aprender pra na proxima ja até editalo, pois eu edito algo nele como oq procurar no pos, e ja da erro rs, o seu pega certinho aqui, sem erro. se nao for incomodo vlw
vlw gustavo pela atençao abraços . vo da uma estuda no site sim vlw |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Qui Nov 15, 2007 1:41 pm Assunto: |
|
|
| Alguem pode me dizer porque depois que eu do a primeira pesquisada, nao consigo efetuar nova pesquisa.? |
|
| Voltar ao Topo |
|
 |
forst Membro Junior


Registrado: Domingo, 26 de Junho de 2005 Mensagens: 367
|
Enviada: Qui Nov 15, 2007 11:27 pm Assunto: |
|
|
| Citação: |
Ola forst , poxa mano valew mesmo nao sabe a quanto tempo tento isso, bom agora ja esta resolvido, muito obrigado mano. So que so um pouco principiante, voce poderia da uma explicada nos passos que voce fez para que eu possa aprender pra na proxima ja até editalo, pois eu edito algo nele como oq procurar no pos, e ja da erro rs, o seu pega certinho aqui, sem erro. se nao for incomodo vlw |
Ae cara, trql?
Bah fico feliz por ter ajudado
bom vou te explicar entao oq o codigo que eu te passei faz...
primeiro a parte que copia o valor correto:
| Código: |
Valor := Copy(memo1.lines[i],Pos(vStr,memo1.lines[i])+3,Pos(vStr2,memo1.lines[i])-4);
|
a função copy funciona assim Copy(stringAcopiar,posicao de Inicio, qts caracteres copiar).
a função Pos retorna um valor inteiro (a posicao) em que ele encontrou a String..
Ex : '''300,00''''
O primeiro Pos vai retornar 1 (mas como eu nao quero copiar apartir da ' e sim no final dela.. eu tenho que acrescentar + 3 na posicao pra ele começar a copiar no 300,00. entende? dai o copy vai começar com a posicao de inicio no 4...
O segundo Pos é 10(pq é 10? pq ele encontro as aspas no caracter 10 da string), mas como eu nao quero copiar 10 caracteres, eu tenho que subtrai aquelas 4 aspas... dai ficaria 6...
ou seja Meu copy traria uma copia daquela string, da posicao de inicio 4 e de 6 caracter que é exatamente 300,00
e pra andar nas linhas do memo eu tinha feito um for... que é um laço de repetição...
ex:
| Código: |
linhas := mmo1.lines.count;
for i := 1 to linhas do
begin
end;
|
oq esse codigo faz?
a variavel linhas recebe a quantidade de linhas que tem no memo...
e esse meu laço vai começar no 1 e terminar nessa quantidade de linhas..
enquanto ele nao xegar nessa quantidade de linhas ele vai continuar ali dentro...
na primeira volta do meu laço o valor vai ser 1... entao ele vai ver na linha 1... depois vai ser 2.. dai ele vai ver na linha 2... 3...... 4.....
consegue entende?
p.orra é horrivel de explica escrevendo.. aiuwehawe
mas nao é dificil.. só vc prestar atenção...
talvez eu te enrolei mais ainda...
| Citação: |
Alguem pode me dizer porque depois que eu do a primeira pesquisada, nao consigo efetuar nova pesquisa.?
|
eu nao intendi oq vc quiz dizer...
Flw,
[]s _________________ Precisando de ícones para suas aplicações em Delphi?
www.soicones.com
Milhares de Ícones PNG de alta qualidade disponíveis em diversos tamanhos. |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
Enviada: Sex Nov 16, 2007 11:07 am Assunto: |
|
|
Eita, forst aeuahue deu pra entender tudo sim mais explicado que isso nao tem, entendi sim mano vlw, mais olha so
Ai entao O 1 pos copia depois das 3 aspas, o segundo começa na 10 e subitrai 4, pra ficar so os 6 dig no caso 300,00 mais so que ai então se o valor for 1000,00 por ex, que ja aumenta 1 numero, ele vai apagar o ultimo 0 correto?
E sobre a citação que você não entendeu, e que depois que eu faço a primeira busca em um texto, ele acha tudo direitinho mais se eu tentar efetuar, uma nova busca, ja e como se o programa nao funcionasse mais nao acontece nada.. |
|
| Voltar ao Topo |
|
 |
gilbertodias1 Novato

Registrado: Terça-Feira, 6 de Novembro de 2007 Mensagens: 26
|
|
| Voltar ao Topo |
|
 |
forst Membro Junior


Registrado: Domingo, 26 de Junho de 2005 Mensagens: 367
|
Enviada: Sex Nov 16, 2007 2:07 pm Assunto: |
|
|
| gilbertodias1 escreveu: | Eita, forst aeuahue deu pra entender tudo sim mais explicado que isso nao tem, entendi sim mano vlw, mais olha so
Ai entao O 1 pos copia depois das 3 aspas, o segundo começa na 10 e subitrai 4, pra ficar so os 6 dig no caso 300,00 mais so que ai então se o valor for 1000,00 por ex, que ja aumenta 1 numero, ele vai apagar o ultimo 0 correto?
|
Ae..
tipo, faz o seguinte..
tira a linha do valor e coloca essas no lugar:
| Código: |
Valor := Copy(memo1.lines[i],Pos(vStr,memo1.lines[i])+3,Pos(vStr2,memo1.lines[i]));
Valor := Copy(Valor,1,length(valor)-4);
|
a Função length retorna o numero de letras que tem na String.. ou seja, assim vc não vai ter problemas se for um valor 15,00 ou 146000,00.. =]
Saco bixo?
| Citação: | | E sobre a citação que você não entendeu, e que depois que eu faço a primeira busca em um texto, ele acha tudo direitinho mais se eu tentar efetuar, uma nova busca, ja e como se o programa nao funcionasse mais nao acontece nada.. |
bom ai é alguma coisa ai..
pq eu fiz um teste aki e funciona certinho... deve ter alguma coisa ai que nao deve tar deixando...
depois que vc faz a primeira busca vc não esta modificando esse seu memo em que você faz a pesquisa? deve ser algo do tipo...
qdo der uma folga no trampo do uma olhada la no teu topico..
Flw,
[]s _________________ Precisando de ícones para suas aplicações em Delphi?
www.soicones.com
Milhares de Ícones PNG de alta qualidade disponíveis em diversos tamanhos. |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|