buenas a todos , digamos que tengo un archivo asi :
NOMBRE
Rolando
PESO
52
ALTURA
1.56
O este otro caso
NOMBRE Rolando PESO 52 ALTURA 1.56
como me posiciono en por ejemplo PESO y saco el valor 52 para hacer operaciones con ese valor?
se como abrir y cerrar ficheros y como escribir estos datos en el, pero no se como buscar una palabra determinada y leer el valor que sige ya sea si este esta en la misma linea o en la de abajo como en este caso,
un bucle for asta que encuentre un numero?,eso aria yo en el peor de los casos....,ir comparando el caracter que recore el bucle,y cuando encuentre numero pues que lo vaya guardando en un array,y de alli realizar las operaciones,no se me ocurre otra cosa,quizas aiga alguna funcion que lo haga pero vamos ni idea :S
suerte amigo
Te voy a dar una pista de ccomo lo haria yo:
Primero leo la primera linea con gets,y hago un strlen(palabra),si la longitud de la cadena tiene los mismos caracteres que nombre,significa que en esa linea solo esta el nombre y haria un salto de linea para leer el nombre mas abajo,si todo esta en la misma linea,se podria usar la "debilidad" de fscanf de leer hasta un espacio,leeria hasta nombre ,un espacio,y luego leeria la siguiente cadena...Esto es una idea aproximada,necesitaras usar fseek para moverte por el archivo para hacer lo que te dije...
Otra manera mas larga,seria ir caracter por caracter,si el primer caracter coincido meto una condicion de que si el siguiente tambien coincide que siga en el bucle,cada caracter estará metido en una cadena,y luego comprobaria la cadena,es decir:
Nombre:
Si caracter leido igual a n,seguimos,sino se sale del bucle,si caracter leido igual a o seguimos dentro...
Hay otra,pero es con punteros,y no se si los has dado :silbar:
Un saludo
La forma de Dark Invader me parece bastante buena :),la de recorrer caracter x caracter (que es la que use yo) no es tan "professional",pero vamos el objetivo es ese mismo.
suerte
Dark Invader explica como lo harias con punteros anda, que no se me ocurre xD
¡Buenas!
Da igual que los datos esten en una linea o en varias. Lo que tienes en el fichero son pares de tipo_dato/valor, por lo tanto, lees el tipo de dato en un string, y si coincide con el que buscas lees el valor asociado. Es decir tienes que leer el par tipo_dato/valor, hasta que tipo_dato sea el que buscas...
Para leer los datos, investiga sobre las funciones de stdio.h (cstdio) o los operadores/funciones de iostream.
http://www.cplusplus.com/ (http://www.cplusplus.com/)
¡Saludos!
Cita de: El_Java en 31 Agosto 2011, 16:38 PM
Dark Invader explica como lo harias con punteros anda, que no se me ocurre xD
Si tengo tiempo lo hago El_Java,(bueno ya lo he intentado y estoy teniendo problemas,por bocas :xD ) de todas maneras las otras dos formas las he dejado,la de los punteros intentare dedicarle mas tiempo,pero creo que hable mas de la cuenta al decir que se haria con punteros,en fin...Como dicen,no hay nada imposible de hacer con C :silbar:
Tambien podrias utilizar la siguiente funcion:
http://foro.elhacker.net/programacion_cc/funcion_findstring-t337296.0.html (http://foro.elhacker.net/programacion_cc/funcion_findstring-t337296.0.html)
A ver.. Solo es para un ejemplo.? O quieres hacerlo para un software que andas desarrollando.? porque no metes todos los datos en un XML.?
Con esa estructra lo que haria yo Es.. un...
fgets(oPen, 255, channel); //Para leer linea por linea
Y luego un...
strstr(oPen, "52") //Busco la cadena 52
Saludos =)
gracias a todos por las respuestas,
en realidad el archivo tiene esta estructura :
18.20 20.22 32.55
15.58 02.58 11.25
25.66 45.85 36.45
cada columna corresponde a un mismo tipo de dato
entonces lo que tengo que hacer es recuperar esos datos, tonces por ejemplo me piden el primer dato y yo imprimo en pantalla
registro 1 registro 2 registro 3
18.20 15.58 25.66
sin embargo no se el numero de lineas en el archivo , ya que depende de cuantas se hallan metido, intente con este codigo para contar las lineas del archivo y asi poder hacer un bucle que me imprima la palabra registro 1 registro 2 y assi, pero me cuenta las lineas en 0
int main () {
char c;
int num=0;
ifstream archivo;
is.open ("fichero.txt");
while (archivo.good())
{
c = archivo.get();
if (c=='\n')num++;
}
is.close();
}
y luego he invetigado pero no se como accedder alos datos que ocupo, ya sea la primera columna , segunda o tercera
tengo este codigo
strcat(datoscliente.identificacion, ".dat"); //aqui abre el archivo
ifstream archivoreporte (datoscliente.identificacion, ios::in);
if(!archivoreporte){
cerr<<"NO SE PUDO ABRIR EL ARCHIVO"<<endl;
exit(1);
}
cout <<" QUE DATO DESEA COMPARAR HISTORICAMENTE ?"<<endl;
cout <<endl;
cout <<" PESO (1)" <<endl;
cout <<" TALLA (2)" <<endl;
cout <<" % DE GRASA (3)" <<endl;
cout <<endl;
cout <<endl;
cout <<" POR FAVOR , ESCOJA UNA OPCION"<<endl;
cout <<" ";cin>>opcion;
switch (opcion)
{
case 1:
for (int i=0;i<=num;i++){
cout<<"REG "<<i<<setw(5);
}
NO SE QUE HACER
break;
case 2:
break;
case 3:
break;
default:
cout <<" EL VALOR INGRESADO NO CORRESPONDE A NINGUN MENU, POR FAVOR , TRATE DE NUEVO";
cout <<" PRESIONA CUALQUIER TECLA PARA CONTINUAR\n";
getch();
system("cls");
reporte();
}//fin switch
Si se utiliza de el C++ entonces debe utilizar de la funciones
no han sido evaluados, pero diebe ejecutar
#include <fstream>
#include <sstream>
#include <iostream>
#include <string>
...
std::ifstream file("filename");
if (!file)
return -1;
std::string encabeziamento;
if (!std::getline(encabeziamento))
return -1;
std::string linea;
while (file >> linea)
{
double v1, v2, v3;
std::istringstream parser(linea)
parser >> v1 >> v2 >> v3
}