Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas con una cadena de caracteres

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas con una cadena de caracteres Responder citando

Lo primero un salido,

Veran estoy con una pequeña aplicación para imprimir cheques, y el problema que tengo es que necesito que me corte la cadena donde tengo el numero en formato de letras, pero el problema es que no quiero que me dejes palabras a medias. Ej.

    150.260 €
    Ciento cincuenta mil doscientos se
    Senta euros.


Lo que he pensado en principio es que vaya contando el numero de caracteres de la cadena para que encaje con los que me entran por renglón, y que utilice los espacios para determinar si rompe o no la palabra, cortando la cadena en el espacio anterior al tope de caracteres.Ej

    150.260 €
    Ciento cincuenta mil doscientos **
    sesenta euros

    **esto teniendo en cuenta que el numero total de caracteres por renglón sea de 34, solo que como no rompe palabras me corta en el espacio inmediatamente anterior.



la pregunta es como puedo hacer lo que pretendo, o si me aconsejais algun otro modo.

No sé si me he explicado bien, pero en fín ahí queda.
Gracias por adelantado.
Un saludo.
_________________
Si dices que sabes, te preguntaran hasta que no sepas....
Si dices que no sabes, te diran hasta que sepas....
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Prueba con algo así:

AnsiString cAux;
AnsiString cCantidad = "Ciento cincuenta mil doscientos sesenta euros";
TStringList cLineas = new TStringList();

while (!cCantidad.IsEmpty())
{
cAux = cCantidad.SubString(1, 34);
cCantidad = Trim(cCantidad.SubString(35, cCantidad.Length()));

if (cAux.Length() >= 34 && cAux.LastDelimiter(" ") <34>Add(cAux + AnsiString::StringOfChar('*', 34 - cAux.Length());
}
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)


Ultima edición por Angel el Vie 09 May, 2008 7:25 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Amigo Angel, cuando pongo tu codigo me dá los siguientes errores:

Referente a la linea
Código:
TStringList = new TStringList();

    [C++ Error] Unit1.cpp(22): E2034 Cannot convert 'TStringList *' to 'TStringList'

Referente a la linea
Código:
 if (cAux.Length() >= 34 && cAux.LastDelimiter(" ") <34> Add(cAux + AnsiStrin::StringOfChar('*', 34 - cAux.Length()); 

    [C++ Error] Unit1.cpp(29): E2268 Call to undefined function 'Add'


Desconozco el motivo(soy más que novato en esto).

Gracias.
_________________
Si dices que sabes, te preguntaran hasta que no sepas....
Si dices que no sabes, te diran hasta que sepas....
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

No sé porqué, no tiene nada que ver lo que se ve en el mensaje con lo que está realmente escrito. Es pera un momento, que rehago el código.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A ver ahora:
Código:
AnsiString cAux;
AnsiString cCantidad = "Ciento cincuenta mil doscientos sesenta euros";
TStringList *cLineas = new TStringList();

while (!cCantidad.IsEmpty())
{
     cAux = cCantidad.SubString(1, 34);
     cCantidad = Trim(cCantidad.SubString(35, cCantidad.Length()));

     if (cAux.Length() >= 34 && cAux.LastDelimiter(" ") < 34)
     {
          cCantidad = Trim(cAux.SubString(cAux.LastDelimiter(" ") + 1, cAux.Length())) + cCantidad;
          cAux = cAux.SubString(1, cAux.LastDelimiter(" ") - 1);
     }
// Aquí va el método Add del TStringLIst
}


Entre las dos últimas llaves de cierre (dos últimas líneas) tiene que ir esta otra el add a cLineas, ¡QUÉ NO SÉ PORQUÉ DEMONIOS SI PONGO EL CÓDIGO COMPLETO ME DESBARATA TODO EL MENSAJE!. Busca en la Ayuda de TStringList el código para añadir. Lo que hay que poner en el método Add() del TStringList es esto:
Código:
cAux + AnsiString::StringOfChar('*', 34 - cAux.Length()))

para que escriba esto en la variable:
Cita:
Ciento cincuenta mil doscientos***
sesenta euros*********************

Los errores que citas ([C++ Error] Unit1.cpp(22): E2034 Cannot convert 'TStringList *' to 'TStringList' y [C++ Error] Unit1.cpp(29): E2268 Call to undefined function 'Add') se han provocado por el descogorcie del código original, no por que seas más o menos novato.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Muchas Gracias Angel, con un par de arreglos para adaptarlo a mi codigo va de Put...Madr...
Lo que he puesto con el metodo Add. es esto.
Código:
cLineas->Add(cAux + AnsiString::StringOfChar('*', 70 - cAux.Length()));


Con eso funciona bien.

Muchas Gracias.

Pd.
Como novato que soy, para poder empezar con esto de la progamacion, he buscado todos los foros habidos y por haber, y os puedo garantizar que en lo que a c++ builder se refiere, como esté ninguno..vaya mi FELICITACION a todos los que haceis posible este foro. Sois ese amigo que nunca falla.

Gracias y a seguir así..

Un Saludo
Martin.
_________________
Si dices que sabes, te preguntaran hasta que no sepas....
Si dices que no sabes, te diran hasta que sepas....
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

martinlop2007 escribió:
Código:
cLineas->Add(cAux + AnsiString::StringOfChar('*', 70 - cAux.Length()));

Puedes hacer un modificación: Guardar en un fichero tipo INI la longitud delas líneas; siempre será más fácil modificar un INI que el código fuente.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Buena idea, así podremos configurar el programa a distintos tipos de cheques de una manera mas facil....

Gracias de nuevo.

Un Saludo.
_________________
Si dices que sabes, te preguntaran hasta que no sepas....
Si dices que no sabes, te diran hasta que sepas....
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.