Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión

 
Búsqueda Avanzada

15.707 Mensajes en 3.130 Temas- por 371 Usuarios - Último usuario: lasfirrot
Mayo 18, 2012, 05:08:14
Foro de Hispabyte.netProgramaciónLenguajes y ProgramaciónC / C++ (Moderador: D4MR0D)Tema: Pasar fichero a array de 2 posiciones
Páginas: [1]   Ir Abajo
Imprimir
Autor Tema: Pasar fichero a array de 2 posiciones  (Leído 1444 veces)
0 Usuarios y 1 Visitante están viendo este tema.
WInfTc
Visitante
« : Enero 05, 2010, 08:40:54 »


Buenos dias Amigos de la comunidad!!!
Les quiero comentar una duda que tengo

tengo un archivo de texto plano guardado en un lugar de mi disco duro masomenos de este formato
1 2
1 7
9 7
2 15
6 4
-5 7
20 3
10 12
0 16
el archvo se llama in.txt que cada linea consta de dos numeros separados por un espacio y lo que quiero es poder separar cada linea en un array[2] de enteros de dos elementos para posterior hacer operaciones con ellos
mi codigo en c++ es este que solo me imprime linea por linea
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <stdio.h>
#include <conio.h>
using namespace std;

int main()
{
   
   ifstream file("F:\in.txt");
   string str;
   while(getline(file,str)){
      cout<<str<<endl;         
   }   
   file.close();
   system("pause");
   return 0;
}

intente resolverlo con strtok(str," ")  pero nose muy bien como implementarlo
si alguien me pueda ayudar le agradecere bastante.

Gracias!!!
WinfTc
« Última modificación: Enero 05, 2010, 08:42:36 por WInfTc » En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #1 : Enero 05, 2010, 03:36:06 »

Hola compañero, primero decirte que para un tema no relacionado, es mejor abrir un post, ya te he movido el mensaje.

Para tu caso en concreto, mas facil que dividir la linea, seria leerlo como enteros directamente y leer enteros de dos en dos.

Algo asi
int x,y;
while(cin >> x >> y)

{
  miarray[0]=x;
  miarray[1]=Y;
}

Espero que te sirva de ayuda, un saludo.
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #2 : Enero 05, 2010, 03:50:00 »

bueno cin seria en la entrada estandard, en tu caso seria file.

En línea
WInfTc
Visitante
« Respuesta #3 : Enero 05, 2010, 05:28:07 »

Disculpa por la localizacion del post!!

Muchas gracias por la respuesta pero no tengo solucion al problema
Código:
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main()
{

ifstream file("F:\in.txt");
int x,y;
while(file >> x >> y){
cout<< x << y << endl;
}
file.close();
system("pause");
return 0;
}
trabaje con esas lineas y no me impre nada  Triste
muy disculpas si soy muy novato!!

Nuevamente Gracias por su respuesta!!!
« Última modificación: Enero 05, 2010, 06:08:52 por WInfTc » En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #4 : Enero 05, 2010, 06:17:34 »

El problema es este, en vez de poner

ifstream file("F:\in.txt");

pon

ifstream file("F:\\in.txt");

¿Porque dos barras? Muy sencillo. Resulta que la \ sirve para indicar que va un caracter especial o un caracter "que es especial" debe ser tomado como literal.

Imaginate que la ruta tuviera comillas, para que no se cerraran, pondrias \" la barra delante le indica eso, que es un literal.

Ahora bien, para poner una barra, dado que la barra en si misma es un caracter especial, debes poner primero una barra y luego la barra de nuevo, para que cuente como una sola.

No se si me he explicado bien, pero asi ya lo tienes.

Un saludo.
En línea
WInfTc
Visitante
« Respuesta #5 : Enero 05, 2010, 06:39:24 »

Muchas Gracias!!!
me servio de mucho pero intentando con el anterior resolvi el problema con

while(!file.eof()){
   file >> x >> y;
}

y ahora HQH como seria para un archivo con n datos por linea masomenos  asi
1 2 1 2 2 -15
1 7 10 12 7
9 7 10
2 -15
6 4
-5 720 3
20 3
10 12 0 16
0 16
Algo tengo entendido que es con vector pero ahora si necesariamente usar tokens¿?.
Muchas Gracias por su comprension.!!
Nuevamente muchas Gracias HQH  Sonrisa
WInfTc
« Última modificación: Enero 05, 2010, 06:45:23 por WInfTc » En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #6 : Enero 05, 2010, 09:38:09 »

Puedes leer la cadena normal (leyendo toda la linea) y usarlo como un stream mas.
Ese stream se acabaria al acabar el contenido de la cadena (igual que el del fichero se acababa al acabar el fichero).

Aqui un ejemplo obtenido de internet, fijate que usan sstream como libreria y el tipo de stream istringstream

Código:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
//================================================================ main
int main() {
    string s;                 // Where to store each line.
    int    a, b;              // Somewhere to put the ints.
    char   op;                // Where to save the char (an operator)
    istringstream instream;   // Declare an input string stream
   
    while (getline(cin, s)) { // Reads line into s
        instream.clear();     // Reset from possible previous errors.
        instream.str(s);      // Use s as source of input.
        if (instream >> a >> op >> b) {
            instream >> ws;        // Skip white space, if any.
            if (instream.eof()) {  // true if we're at end of string.
                cout << "OK." << endl;
            } else {
                cout << "BAD. Too much on the line." << endl;
            }
        } else {
            cout << "BAD: Didn't find the three items." << endl;
        }
    }
    return 0;
}

Espero te sirva de ayuda.
En línea
WInfTc
Visitante
« Respuesta #7 : Enero 05, 2010, 10:21:47 »

Muchas Gracias HQH, deberas me ayudastes un monton!!!  Sonreir
de todas maneras comparto el codigo con la comunidad!!
aunq no hace mucho crea un vector con todos los datos de una linea y los suma, algo facil pero desde un archivo me parecio complicado.. El formato del archivo esta posteado arriba!:D Cheesy

Código:
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <vector>
#include <sstream>
using namespace std;
int main()
{

ifstream file("F:\\in.txt");
string str;
string temp;

while(getline(file,str))
{
vector<int> v;
istringstream instream;
instream.str(str);
while(!instream.eof())
{
int n=0;
instream >> n;
v.push_back(n);
}
int suma=0;
for(int i=0;i<v.size();i++)
suma+=v[i];
cout<<suma<<endl;
}
file.close();
system("pause");
return 0;
}

Muchas gracias HQH, no lo habria logrado sin tu ayuda!!!  Sonrisa
En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #8 : Enero 06, 2010, 01:47:11 »

De nada, para eso estamos, para compartir, aprender y ayudarnos Gi&ntilde;ar
En línea
Páginas: [1]   Ir Arriba
Imprimir
Foro de Hispabyte.netProgramaciónLenguajes y ProgramaciónC / C++ (Moderador: D4MR0D)Tema: Pasar fichero a array de 2 posiciones
Ir a:  


Tema diseñado por RJ-45 para Hispabyte.net basado en el
theme famouspadexx v.09 designed by Formado Comprido
Downloable here. My present to padexx.de