| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Jue 08 May, 2008 3:29 pm Asunto: Problemas con una cadena de caracteres |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 08 May, 2008 5:03 pm Asunto: |
|
|
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 |
|
 |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Jue 08 May, 2008 6:08 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 09 May, 2008 7:52 am Asunto: |
|
|
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 |
|
 |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Vie 09 May, 2008 11:46 am Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 09 May, 2008 1:28 pm Asunto: |
|
|
| 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 |
|
 |
martinlop2007 Lt JG


Registrado: 20 Feb 2007Mensajes: 67
|
Publicado: Vie 09 May, 2008 4:23 pm Asunto: |
|
|
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 |
|
 |
|