Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2016
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Leer inicio de un string

Saludos, Consulta rápida....

imaginemos que tengo dentro de un edit lo siguiente:
//ClubDelphi

a manera de If...Then...Else como puedo definir que si en el edit los dos primeros espacios son exactamente esos dos símbolos // por ejemplo me muestre un mensaje diciendo Hola y que de lo contrario diga Adiós.

Me di a entender? solo necesito identificar el inicio de una cadena para a partir de esa información establecer condiciones
Responder Con Cita
  #2  
Antiguo 16-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por feliz-58 Ver Mensaje
Saludos, Consulta rápida....

imaginemos que tengo dentro de un edit lo siguiente:
//ClubDelphi

a manera de If...Then...Else como puedo definir que si en el edit los dos primeros espacios son exactamente esos dos símbolos // por ejemplo me muestre un mensaje diciendo Hola y que de lo contrario diga Adiós.
...
Hola, respuesta rápida
Código Delphi [-]
function foo(const s: string): string;
begin
  if (s[1] = '/')and(s[2] = '/') then
    Result := 'Hola'
  else
    Result := 'Adios';
end;
O también:
Código Delphi [-]
function foo(const s: string): string;
const
  MSG: array[Boolean] of string = ('Adios','Hola');
begin
  Result := MSG[(s[1] = '/')and(s[2] = '/')];
end;

Uso:
Código Delphi [-]
 
  ShowMessage(foo('//ClubDelphi'));

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-03-2016 a las 23:19:18.
Responder Con Cita
  #3  
Antiguo 16-03-2016
Avatar de BDWONG
BDWONG BDWONG is offline
Miembro
NULL
 
Registrado: nov 2013
Posts: 113
Poder: 11
BDWONG Va por buen camino
Cool Hola

Parece que se me adelanto eficsia
pero tambien existen estas posibles soluciones

Código Delphi [-]
var
  cadena:String;
begin
   cadena:='//ClubDelphi';

   //Opcion 1: comparando las dos primeras posiciones de la cadena
   if (cadena[1]='/') and (cadena[2]='/') then WriteLn('Hola')
   else WriteLn('Adios');

   //OpCION 2: Usando la funcion Pos que nos regresa la posicion donde se encuentra la "//"
   //si nos devuelve 1 esta al inicio de la cadena
   if  Pos('//',cadena)=1 then WriteLn('Hola')
   else WriteLn('Adios');

   //Opcion 3: Usanodo AnsiStartsStr nos devuevel true o false si una palabra se encuentra al inicio de la cadena
   if AnsiStartsStr('//',cadena) then WriteLn('Hola')
   else WriteLn('Adios');

   ReadLn;
end.

Saludos...
Responder Con Cita
  #4  
Antiguo 16-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Es correcto BDWONG

Otras alternativas:
Código Delphi [-]
function foo(const s: string): string;
begin
  if s[1]+s[2] = '//' then
    Result := 'Hola'
  else
    Result := 'Adios';
end;

Código Delphi [-]
function foo(const s: string): string;
begin
  if Copy(s, 1, 2) = '//' then
    Result := 'Hola'
  else
    Result := 'Adios';
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-03-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
commo dato los strings para plataformas moviles parten en la posicion cero, para macos y windows en la 1....

ojo con eso salu2
__________________
^_^

http://stna.cl
Responder Con Cita
  #6  
Antiguo 16-03-2016
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola, respuesta rápida
Código Delphi [-]
function foo(const s: string): string;
begin
  if (s[1] = '/')and(s[2] = '/') then
    Result := 'Hola'
  else
    Result := 'Adios';
end;
O también:
Código Delphi [-]
function foo(const s: string): string;
const
  MSG: array[Boolean] of string = ('Adios','Hola');
begin
  Result := MSG[(s[1] = '/')and(s[2] = '/')];
end;

Uso:
Código Delphi [-]
 
  ShowMessage(foo('//ClubDelphi'));

Saludos
Agradecimiento Rápido. Saludos!
Responder Con Cita
  #7  
Antiguo 17-03-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por fredo Ver Mensaje
commo dato los strings para plataformas moviles parten en la posicion cero, para macos y windows en la 1....

ojo con eso salu2
Espera, espera, espera: ¿Que qué? O sea, ¿no hay congruencia dentro del lenguaje?

¿Y si estás haciendo algo para móviles y escritorio (una bilbioteca, por ejemplo), cómo te lo montas?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #8  
Antiguo 17-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
El ayudante TStringHelper se "encarga" de esos menesteres

+Info
Responder Con Cita
  #9  
Antiguo 18-03-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Algunas de las soluciones propuestas son propensas a un Access Violation

LineComment Saludos
Responder Con Cita
  #10  
Antiguo 19-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pues si, ojo con los strings vacios

Código Delphi [-]
function foo1(const s: string): string;
begin
  if (s[1] = '/') and (s[2] = '/') then
    Result := 'Hola'
  else
    Result := 'Adios';
end;

function foo2(const s: string): string;
const
  MSG: array [Boolean] of string = ('Adios', 'Hola');
begin
  Result := MSG[(s[1] = '/') and (s[2] = '/')];
end;

function foo3(const s: string): string;
begin
  if s[1] + s[2] = '//' then
    Result := 'Hola'
  else
    Result := 'Adios';
end;

begin
  try
     Writeln('Foo1 EmptyStr: ' + foo1('')); // AV
     Writeln('Foo2 EmptyStr: ' + foo2('')); // AV
     Writeln('Foo3 EmptyStr: ' + foo3('')); // AV
     Writeln('Foo3 A: ' + foo3('A')); // AV
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Responder Con Cita
  #11  
Antiguo 20-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Dije fué una respuesta rápida (al vuelo) por lo que no incluí comprobaciones Pero se puede verificar que la cadena a enviar esté vacía externamente como bién lo ha expuesto Agustín, o también dentro de las mismas funciones.

Ejemplo:
Código Delphi [-]
function foo(const s: string): string;
const
  MSG: array [Boolean] of string = ('Adios', 'Hola');
begin
   if s = '' then raise Exception.Create('cadena vacía');
   Result := MSG[(s[1] = '/') and (s[2] = '/')];
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 20-03-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Como dije fué una respuesta rápida (al vuelo) por lo que no incluí comprobaciones . Pero se puede verificar que la cadena a enviar esté vacía externamente como bién lo ha expuesto Agustín, o también dentro de las mismas funciones.

Ejemplo:
Código Delphi [-]
function foo(const s: string): string;
const
  MSG: array [Boolean] of string = ('Adios', 'Hola');
begin
   if s = '' then raise Exception.Create('cadena vacía');
   Result := MSG[(s[1] = '/') and (s[2] = '/')];
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 20-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
De todos modos a mi no me parece mal que se implemente asi

Siempre me gusto la filosofia de "diseño por contrato", basicamente la funcion cumple con su parte siempre y cuando el que la invoca cumpla con la suya

En este caso las precondiciones son: La cadena no debe estar vacia y en el caso de una de las versiones que tiene una condicion or debe tener una longitud mayor o igual a 2 caracteres

Si las precondiciones se cumplen, la funcion "foo" te promete cumplir con las postcondiciones: Decirte True o False si un string comienza con dos determinados caracteres
Responder Con Cita
  #14  
Antiguo 20-03-2016
Avatar de BDWONG
BDWONG BDWONG is offline
Miembro
NULL
 
Registrado: nov 2013
Posts: 113
Poder: 11
BDWONG Va por buen camino
Aquí una pequeña variación de la función de eficsia evitando usar excepciones

Código Delphi [-]
function foo(const s: string): string;
const
  MSG: array [Boolean] of string = ('Adios', 'Hola');
begin
   Result := MSG[(Length(s)>=2) and (s[1] = '/') and (s[2] = '/')];
end;

begin

  Writeln(foo('sinBarras'));
  Writeln(foo('//conBarras'));
  ReadLn;
end.
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
leer string por caracteres tgsistemas OOP 4 07-05-2010 20:29:27
leer texto pero del final al inicio octalh Varios 6 04-04-2008 04:13:01
Ejecutar programa al inicio antes inicio sesion hibero Varios 0 07-02-2007 21:52:44
Leer un String dayrontbs Varios 1 19-07-2006 20:19:46


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


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