Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Un PChar es un puntero a un caracter, se utilizan para manejar cadenas terminadas en caracter nulo como en C. El "truco" esta es mover el puntero por la cadena, adelante o atras segun convenga.

Por ejemplo:
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  i: integer;
  s: string;
begin
  GetMem(P, 256);
  try
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    // Recorremos el texto sabiendo su longitud
    Aux:= P;
    s:= '';
    for i:= 1 to StrLen(P) do
    begin
      s:= s + Aux^;
      inc(Aux);
    end;
    ShowMessage(s);
    // Recorremos el texto hasta encontrar el caracter nulo
    Aux:= P;
    s:= '';
    while Aux^ <> #0 do
    begin
      s:= s + Aux^;
      inc(Aux);
    end;
    ShowMessage(s);
    // En cualquiera de los 2 casos Aux queda apuntando
    // al caracter nulo
    inc(Aux);
    // Ahora Aux esta apuntando al siguiente caracter si lo hubiese.
  finally
    FreeMem(P);
  end;
end;

Es solo un ejemplo de como recorrer la cadena, para copiar el contenido de un PChar en un String hay metodos mas eficaces:
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  s: string;
begin
  GetMem(P, 256);
  try
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    // Copaimos el texto en S
    S:= String(P);
    // Colocamos el puntero Aux apuntando al caracter siguiente al nulo
    Aux:= P + StrLen(P) + 1;
    ShowMessage(S);
  finally
    FreeMem(P);
  end;
end;

Y algo parecido a lo que quieres hacer tu, metemos en una misma porcion de memoria un texto y un integer, y luego los volvemos a separar.
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  s: string;
  i,j: Integer;
begin
  GetMem(P, 256);
  try
    // Aqui metemos en un mismo buffer un texto y a continuacion un integer
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    i:= 1234;
    // Hacemos que Aux apunte al carater siguiente al nulo
    Aux:= P + StrLen(P) + 1;
    move(i,Aux^,sizeof(i));

    // Ahora sacamos de nuevo la informacion
    S:= String(P);
    Aux:= P + StrLen(P) + 1;
    move(Aux^,j,sizeof(j));
    ShowMessage(S + ',' + IntTostr(j));
  finally
    FreeMem(P);
  end;
end;

Son varios ejemplos de como tratar con PChar, revisa tanbien la ayuda de delphi, encontraras un monton de funciones para tratar con este tipo de cadenas de texto. Y si no encuentras lo que buscas vuelve por aqui haber que podemos hacer.
Responder Con Cita
  #2  
Antiguo 24-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Quizás fuera más facil pasar el Pchar a String o a un TStringList, mediante TStringList.DelimitedText puedes partir en trozos la cadena (por espacios, por un punto y coma, por una coma, etc).

Al pasarlo a un String, puedes usar la archifamosa función "Pos" o "copy" para copiar los caracteres.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 24-05-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
p:Pchar;
S:String;
begin
P:='ABCDEFG';
ShowMessage(p[3]);
s:=P[2];
ShowMessage(s);
end;

Si es para un solo caracter te puede valer un índice para recorrer la variable.

Si extraes más de uno a la vez, quizás con Copy puedas hacerlo, en cuanto a explicaciones las que te da Seoane y Lepe son amplias y doctas.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 24-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Gracias!!!!

Gracias a todos!!! Ya voy viendo la luz al final del tunel....lo mismo a medio camino debo hacer otra paradita por aqui...




Gracias!!!
Responder Con Cita
  #5  
Antiguo 24-05-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ten en cuenta que hemos inaugurado hace poco el Foro "La Taberna", lugar apto para paraditas y lo que salga, en donde te puedes poner de bebida virtual hasta los tuétanos, es gratis y no afecta a la conducción.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 24-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Duda sobre StrCopy

Hola,

no se por qué me da error al poner:

StrCopy(bufferAux,(formatFloat('0000',length(bufferAux)) + 't'));

Da "incompatible types string and Pchar".
Responder Con Cita
  #7  
Antiguo 24-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Pues el error lo dice todo . Estas intentando usar un string como si fuera un PChar, que se puede, pero hay que indicarselo al compilador que si no se atraganta , asi que debemos hacer el conveniente typecast.

Código Delphi [-]
StrCopy(bufferAux,PChar(formatFloat('0000',length(bufferAux)) + 't'));
Responder Con Cita
  #8  
Antiguo 25-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
mas sobre pchar

es verdad!!! gracias...

No os lo vais a creer pero sigo teniendo problemas
Seoane lo que me has recomendado me ha parecido genial pero ahora estoy intentando añadir un pchar a otro de la siguiente manera y no lo consigo:

Código Delphi [-]
// Antes de esto hago: leidos:=stream.Read(buffer^,SizeOf(buffer));

repeat
            Application.ProcessMessages;
            GetMem(Cabecera,256);
            GetMem(Bufferaux,3072);
            try
                Fillchar(bufferaux^,2304,0);
                Cabecera:=PChar(formatFloat('0000',length(buffer))+ 't');
                StrCopy(Bufferaux,Cabecera);
                Aux:=Bufferaux + StrLen(Bufferaux) +1;
                move(buffer^,Aux^,sizeof(buffer));
                ClientSocket2.Socket.SendBuf(BufferAux^,SizeOf(BufferAux)); 
                //En BufferAux solo tengo el valor de la cabecera, pero no me  
               //añade el de buffer

            finally
                FreeMem(Cabecera);
                FreeMem(Bufferaux);
            end;
              
            leidos:=stream.Read(buffer^,SizeOf(buffer));
        until(leidos=0);
        stream.Free;

En BufferAux solo tengo el valor de la cabecera, pero no me añade el de buffer. Lo he comprobado paso a paso y en buffer si mete contenido...me estoy montando unos lios...Perdonar por ser tan pesao

Última edición por dec fecha: 25-05-2006 a las 20:41:48.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer arreglo Perrero80 Varios 3 18-05-2006 22:52:27
Compatibilidad entre PChar y String vick Conexión con bases de datos 5 24-10-2005 21:50:35
¿como pasar de String dentro de un PChar? Moises22 Varios 6 27-09-2005 15:43:47
Pchar y String superhopi Varios 8 19-08-2004 09:54:06
problemas de compatibilidad de tipos pchar y string VRO Varios 2 13-05-2004 10:29:34


La franja horaria es GMT +2. Ahora son las 15:36:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi