crear varios ficheros con variables

Iniciado por gAb1, 17 Abril 2013, 18:18 PM

0 Miembros y 1 Visitante están viendo este tema.

gAb1

Estoy intentando crear unos ficheros donde en el nombre aparezca una versión (3 números y en algunos casos una letra, la a), la id del idioma (locale, 4 letras) y la plataforma (pc o mac). Ejemplo: "Name-123a-enUS-PC".

Aprovechando la programación, me gustaría hacerlo lo mas sencillo posible, escribiendo lo menos posible.

Tengo problemas, ya que no sé como declarar las variable que contienen varios carateres (4 en este caso), ¿como podría declarar una variable que contenga "xxXX" para luego imprimirla? ¿Se pueden guardar varios nombres en una variable e imprimirlos cuando se indique? Como no lo sé, estoy declarando una a una:

char e = 'e';
char n = 'n';
char u = 'U';
char s = 'S';


Tampoco sé como podria guardar numeros y una letra (todo junto) en una variable: "123a". He pensado en ASCII pero no me deja poner una sentencia de escape dentro:

int v1=123\97;

Tengo algo en mente pero no consigo aclararme, son varias combinaciones en lo nombres por ejemplo para crear el fichero he pensado en:

Citarint v1=123;
int v2=123a;
char e = 'e';
char n = 'n';
char s = 's';
char u = 'U';
char s = 'S';
char p = 'P';
char c = 'C';

ofstream fs("Name-%d-%c%c%c%c-%c%c.php", v1,e,n,u,s,p,c)
fs << "<?php\nheader ("");\n?>" << endl;
fs.close();

Me faltaría crear un while y un if para cada versión, idioma y plataforma: Name-xxx-xxXX-xx

pacoperico

Cita de: gAb1 en 17 Abril 2013, 18:18 PM
¿como podría declarar una variable que contenga "xxXX" para luego imprimirla?

Si estas trabajando en C declara un arreglo de caracteres:


char cadena[5] = "xxXX\0";
printf("%s", cadena);


La salida en pantalla seria:

xxXX

Cita de: gAb1 en 17 Abril 2013, 18:18 PM
Tampoco sé como podria guardar numeros y una letra (todo junto) en una variable: "123a". He pensado en ASCII pero no me deja poner una sentencia de escape dentro:

En una variable no puedes guardar dos tipos de datos distintos es decir, no puedes guardar datos de tipo char con datos de tipo int. Una variable char lo que guarda realmente es el numero que corresponde segun la tabla ascii con un determinado caracter.

Si quieres guardar numeros y letras en una variable has de usar una variable de tipo char:


char var[5] = "123a\0"


Aqui realmente no estas guardando el dato numerico 123 mas la letra a, estas almacenando los caracteres 123.


gAb1

Gracias por explicármelo, aparte me he acordado de unas cosillas, que llevo tiempo sin programar. Prefiero hacerlo en c++


#include <iostream>
#include <fstream>
using namespace std;

main()
{
char* v[7];
v[0] = '320';
v[1] = '330';
v[2] = '330a';
v[3] = '332';
v[4] = '333';
v[5] = '333a';
v[6] = '335';
v[7] = '335a';
char* l[6];
l[0] = 'enGB';
l[1] = 'enUS';
l[2] = 'esES';
l[3] = 'esMX';
l[4] = 'frFR';
l[5] = 'deDE';
l[6] = 'ruRU';
char* p[1];
p[0] = 'PC';
p[1] = 'MAC';

for (int i = 0; i < 112; ++i)
{
ofstream fs("Fichero-%s-%s-%s.php", v[i], l[i], p[]);
fs << "<?php\nheader ("");\n?>" << endl;
fs.close();
}


Me han dicho que poner char* esta mal ya que puede apuntar donde no toca. Que mejor use std::string pero sigo sin aclararme.

Lo que necesito hacer exactamente son 112 archivos, obviamente cada uno con una versión, idioma y plataforma diferente.

Versiones son 8, tres de ellas llevan la letra a.
Locales son 7.
Y plataformas son 2.
En total son 112 archivos, cada uno con una versión, locale y plataforma especificada.
No consigo aclararme, necesito ayuda!

Gracias.

pacoperico

Primero decirte una cosilla del ultimo codigo que has colgado:
char* v[7];

Estas declarando un arreglo de punteros de siete elementos pero inmediatamente despues cuando introduces los datos del arreglo:

v[0] = '320';
v[1] = '330';
v[2] = '330a';
v[3] = '332';
v[4] = '333';
v[5] = '333a';
v[6] = '335';
v[7] = '335a';


Estas escribiendo ocho elementos en el arreglo que habias declarado como de siete elmentos. Solo has de rectificar la declaracion del arreglo tal que asi:

char* v[8];

Y lo mismo te ocurre con los siguientes arreglos

Volviendo al tema, en c++ lo que puedes hacer es crear un objeto de tipo string y aprovecharte de los metodos que te ofrecen la clase string como podria ser string.append(). Un ejemplo de lo que quiero decirte:

Código (cpp) [Seleccionar]

#include <string>

using namespace std;

int main()
{
string cadena;

if (so == windows)     //si el sistema operativo es windows el objeto cadena empezaria por los caracteres "win"
cadena = "win";
else if(so == apple)
cadena = "mac";

if(idioma == espanol)   //si el idioma es espanol le anadimos al objeto cadena los caracteres "es"
cadena.append("es");
else if(idioma == ingles)
cadena.append("eng");

return 0;
}


Si estuviesemos en windows y en ingles el objeto cadena que hemos creado tendria los siquientes caracteres "wineng".

Las condiciones que he escrito en los if y else...if son solo un ejemplo, eso ya seria en funcion de como tengas implemetando el rellenado de los nombres de tus archivos.


gAb1

Gracias por tu ayuda, al final he conseguido hacer que funcione. :D