Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2014, 03:26
b0rya0n
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Busqueda leer fichero con registro de variables y valores c++

Hola a todos, soy nuevo en este foro y tengo conocimientos básico en c++. Lo que estoy tratando de hacer es lo siguiente:

Tengo un archivo de texto en el cual están lineas como estas:

s123456_00045
s893264_00125
s893264_00032
s123456_00005
s112221_00452
s112221_00030
s893264_00025
s123456_00015
s112221_00001
s135133_00011

lo que quiero es generar a partir de ese un archivo como este:

s123456_00065
s893264_00182
s112221_00483
s135133_00011

es decir, en cada linea seleccionar la cadena antes del "_" como por ejemplo "s123456", ver si en la linea siguiente hay otra cadena igual y si lo hay entonces sumar su valor numérico después del guión. Para el ejemplo de arriba para "s123456" como hay otras lineas con la misma cadena, se sumaria 45+5+15 =65 por lo que la primera linea del nuevo archivo es: s123456_00065.

Se como leer el archivo, como crear el nuevo, como extraer las cadenas que necesito; pero lo que no me sale es hacer ese procedimiento de buscar los repetidos y sumar sus valores.

Unas de las cosas que estoy probando es ingresar las lineas en dos vectores y de hay realizar la operación pero no me ha funcionado el siguiente código que estaba probando.
Código:
#include <iostream>
#include <string.h>

using namespace std;

int existe(char *serie,char (*)[6]);

int main(int argc,char *argv[])
	{
	char series[8][6]={"65425","12345","12546","12345","12546","65425","98564","12546"};
	int saldos[8]={2,6,9,5,4,9,7,3};
	char *escritos[6];
	int esaldos[8];
	int ne=0;
	char cadena[6];
	//int saldo=0;
	for(int i=0;i<8;i++)
		{
		//cout<<series[i]<<" -> "<<saldos[i]<<endl;
		strcpy(cadena,series[i]);
		if(existe(series[i],escritos)==0)
			{
			for(int j=i+1;j<8;j++)
				{
				if(series[i]==series[j])
					{
					saldos[i]=saldos[i]+saldos[j];
					strcpy(escritos[ne],series[i]);
					esaldos[ne]=saldos[i];
					ne++;
					
					}
				}
			}
		}
	for(int k=0;k<ne;k++)
		cout<<escritos[k]<<" -> "<<esaldos[k]<<endl;
	return 0;
	}

int existe(char *serie,char *escrito)
	{
	for(int i=0;i<8;i++)	
		{
		if(strcmp(serie,escrito[i])==0)
			return 1;
		}
	return 0;
	}
Si hay sabe una manera de hacerlo o de hacer funcionar el código que puse arriba se los agradecería muchísimo.

Saludos.