C/Visual C - Modificar variables en la misma linea de fichero

 
Vista:

Modificar variables en la misma linea de fichero

Publicado por Cristi (44 intervenciones) el 07/04/2006 22:43:47
hola tengo un problema, hago lo siguiente con estas funciones de menu, elijo la variable a utilizar segun el switch y segun ella busco en el fichero dicha variable y modifico valores de esa variable, en este caso primer codigo aunque utilizo 2 variables (borde y fondo) se encuentran en diferente frase del fichero, por lo que les pasamos caracteres diferentes y no hay problema, lo que no se es como especificar en caso de q sea la misma linea a MODIFICAR como en texto::modificar_letra de acontinuacion?

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void area::menu_area(string line_aux)
{
int opc,cont;

do
{
system("cls");
cout << " MENU AREA" << endl;
cout << "1. Borde" << endl;
cout << "2. Fondo" << endl;
cout << "3. Salir" << endl;
cout << "Elige la opcion que deseas modificar del area" << endl;
cin >> opc;

const int SIZE=2000;
char *line=new char[2000];
ifstream in ("PaginaPrincipal.html");

switch(opc)
{
case 1:cout << "Borde" << endl;
while (in.getline(line, SIZE)!=NULL)
{
cont=0;
for(int u=0;u<line_aux.size();++u)
{
if(line[u]==line_aux.at(u))
{
cont++;
}
}
if(cont==line_aux.size())
{
break;
}
}
cout << line << endl;
fflush(stdin);
cin.get();
modificar_area(line);
break;

case 2:cout << "Fondo "<< endl;
while (in.getline(line, SIZE)!=NULL)
{
cont=0;
for(int u=0;u<line_aux.size();++u)
{
if(line[u]==line_aux.at(u))
{
cont++;
}
}
if(cont==line_aux.size())
{
break;
}
}
in.getline(line,SIZE);
cout << line << endl;
fflush(stdin);
cin.get();
modificar_area(line);
break;
}
}while(opc!=3);
}

string area::modificar_area (string a)
{
string areaborde="background-color:#";
fondo="";
int r=0;
int b=0;
do
{
if (a.at(r)!=areaborde[b])
{
r++;
b=0;
}
else
{
++b;
++r;
}
}while (b<18);

fflush(stdin);
cin.get();

string c;
while (a.at(r)!=';')
{
c=a.at(r);
fondo.append(c);
++r;
}

cout << fondo <<endl;
fflush(stdin);
cin.get();

return("Hola");
}
A continuacion es la duda, esta programado en otro hpp, pero como hago para separar tipo de letra, tamano, color, etc si vienen en la misma linea PARA MODIFICAR?
void texto::menu_texto(string line_aux)
{
int opc;
do
{
system("cls");
cout << " MENU TEXTO" << endl;
cout << "1. Tipo de letra" << endl;
cout << "2. Tamano" << endl;
cout << "3. Color" << endl;
cout << "4. Subrayado/Negrita/Cursiva" << endl;
cout << "5. Leyenda" << endl;
cout << "6. Salir" << endl;
cout << "Elije la opcion que deseas modificar el texto" << endl;

cin >> opc;
const int SIZE=2000;
char *line=new char[2000];
string copy;

copy="<FONT FACE";
ifstream in ("PaginaPrincipal.html");
switch(opc)
{
case 1:
cout << "Tipo de Letra" << endl;

while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout << line << endl;

int u;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();
modificar_letra(line);
break;
case 2:
cout << "Tamano" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();

pri.modificar_letra(line);

pedir_texto("Tamano", 2);
break;

break;
case 3:
cout << "Color" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{

break;
}
}

cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();
/*while (in.getline(line, SIZE)!=NULL)
{
if (strncmp(line,copy,strlen(copy))== 0 )
{
cout << line << endl;
modificar_letra(line);
pedir_texto("Color", 3);
break;
}
}*/

break;
case 4:
cout << "Subrayado" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
// cout << line << endl;
break;
}
}
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);

cout << line << endl;
fflush(stdin);
cin.get();
/*
while (in.getline(line, SIZE)!=NULL)
{
if (strncmp(line,copy,strlen(copy))== 0 )
{
cout << line << endl;
modificar_letra(line);
pedir_texto("Subrayado", 4);
break;
}
}*/

break;
case 5:
cout << "Leyenda" << endl;
while (in.getline(line, SIZE)!=NULL)
{
if (line==line_aux)
{
// cout << line << endl;
break;
}
}
//in.getline(line,SIZE);
cout <<line<<endl;
do
{
in.getline(line,SIZE);

u=0;
for(int i=0;i<copy.size();++i)
if(copy.at(i)!=line[i])
break;
else
u++;
}while(u<10);
in.getline(line,SIZE);
cout << line << endl;

fflush(stdin);
cin.get();
/*
while (in.getline(line, SIZE)!=NULL)
{
if (strncmp(line,copy,strlen(copy))== 0 )
{
break;
}
}

in.getline(line, SIZE);
cout << line << endl;
modificar_letra(line);*/

break;
}
}while(opc!=6);

}

string texto::modificar_letra(string a)
{

string tipo="FACE=\"";
tipoletra="";
string b;

int i=0;
int t=0;
do{
if (a.at(i)!=tipo[t])
{
++i;
t=0;
}
else
{
++t;
++i;
}
}while (t<6);
fflush(stdin);
cin.get();

while (a.at(i)!='"')
{
b=a.at(i);
tipoletra.append(b);
++i;
}
cout <<tipoletra<<endl;
fflush(stdin);
cin.get();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder