Ler dados de um arquivo txt e transferí-los para variáveis int e * char

4 respostas
R

Pessoal,

Tenho um arquivo texto onde tenho informações do tipo:
Jose
1
10
1
Maria
2
20
1
preciso ler cada linha, transferir os dados string para um *char e os dados int para variáveis int. Consegui ler todos os dados e eles estão da form jose\n1\n10\n1\nMaria\n2\n20\n1\0. Estou tendo dificuldades de pegar o valor por exemplo 10 que no *char seriam 1 um elemento do *char e 0 outro elemento. Como são dois elementos e deverão ser atribuídos a uma var do tipo int, como poderia fazer para conseguir tal coisa? Existe alguma outra estratégia? Não posso usar arquivo binário para resolver o problema.

Grato,

Rhiegen

4 Respostas

R

Eu costumo pegar linha por linha em String e depois converter pra inteiro.

por exemplo:

File f = new File(caminhoarquivo); FileReader flr = new FileReader(f); BufferedReader br = new BufferedReader(flr);

daí vc usar o br para ler as linhas.

como por exemplo

String linha1 = br.readLine();//cada readLine() que vc faz ele lê a linha e vai para a próxima String linha2 = br.readLine();

depois é só converter essa String em inteiro.

R

RichardVaugh:
Eu costumo pegar linha por linha em String e depois converter pra inteiro.

por exemplo:

File f = new File(caminhoarquivo); FileReader flr = new FileReader(f); BufferedReader br = new BufferedReader(flr);

daí vc usar o br para ler as linhas.

como por exemplo

String linha1 = br.readLine();//cada readLine() que vc faz ele lê a linha e vai para a próxima String linha2 = br.readLine();

depois é só converter essa String em inteiro.

Mas o problema é que estou fazendo isso em Linguagem C e não Java

V

Cara, creio utilizar o java.util.Scanner seja a melhor forma de voce realizar essa varredura pelo arquivo. Fiz um codigo, que nao seio do jeito que gostaria, mas vale como exemplo:

import java.io.*;
import java.util.*;

public class LerTexto{
	public static void main(String[] asdf){
		List<Integer> inteiros = new ArrayList<Integer>();
		List<String>  strings = new ArrayList<String>();
		
		//variavel para armazenar os valores da iteracao
		String proximo = null;
		try{
			File arquivo = new File("meuarquivo.txt");
			InputStream input = new FileInputStream(arquivo);
			Scanner s = new Scanner (arquivo);
			
			//definindo o padrao para tokenizar, no caso eh um caracter de nova linha
			s.useDelimiter("\\n");
			while (s.hasNext()) {
				proximo = s.next();			
				try{
					//transformando para um interio, caso contrario assumiremos que eh uma string   
					inteiros.add(Integer.parseInt(proximo));
				}
				catch(NumberFormatException nf){
					strings.add(proximo);
				}
				
			}
			
			//liberando o arquivo 
			s.close();
			
			//testando o conjunto dos interios
			for(int i : inteiros)
				System.out.println("imprimindo os inteiros: "+i);
				
			for(String z : strings)
				System.out.println("imprimindo as strings: "+z);
		}
		catch(IOException e){
			e.printStackTrace();
		}
	}
}

Ate mais.

T

rhiegen:
Pessoal,

Tenho um arquivo texto onde tenho informações do tipo:
Jose
1
10
1
Maria
2
20
1
preciso ler cada linha, transferir os dados string para um *char e os dados int para variáveis int. Consegui ler todos os dados e eles estão da form jose\n1\n10\n1\nMaria\n2\n20\n1\0. Estou tendo dificuldades de pegar o valor por exemplo 10 que no *char seriam 1 um elemento do *char e 0 outro elemento. Como são dois elementos e deverão ser atribuídos a uma var do tipo int, como poderia fazer para conseguir tal coisa? Existe alguma outra estratégia? Não posso usar arquivo binário para resolver o problema.

Grato,

Rhiegen

Você está perguntando para fazer isso em C ou C++?
Se for C++ é mais simples e menos arriscado. Faça algo parecido com o seguinte:

#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

class Cliente 
{
public:
    string nome; // exemplo: Joao
    int valor1; // exemplo: 1
    int valor2; // exemplo: 10
    int valor3; // exemplo: 1
public:
    Cliente (const string& nome_, int valor1_, int valor2_, int valor3_) 
    {
        nome = nome_; 
        valor1 = valor1_;
        valor2 = valor2_;
        valor3 = valor3_;
    }
};

class TesteLeitura 
{
public:
    vector &lt;Cliente&gt; clientes;
public:
    void ler (const string& nomeArquivo)
    {
        string nome; int valor1, valor2, valor3;
        ifstream arqEntrada (nomeArquivo.c_str());
        while (arqEntrada)
        {
            arqEntrada &gt;&gt; nome &gt;&gt; valor1 &gt;&gt; valor2 &gt;&gt; valor3;
            if (arqEntrada)
                clientes.push_back (Cliente (nome, valor1, valor2, valor3));
        }
        arqEntrada.close();   
        // Para mostrar que tudo foi lido corretamente
        for (int i = 0; i &lt; clientes.size(); ++i) 
        {
            cout &lt;&lt; clientes[i].nome &lt;&lt; "," &lt;&lt; clientes[i].valor1 &lt;&lt; "," &lt;&lt; clientes[i].valor2 &lt;&lt; "," &lt;&lt; clientes[i].valor3 &lt;&lt; endl;
        }
    }
};

int main (int argc, char *argv[])
{
    TesteLeitura tl;
    tl.ler("teste.txt"); 
}
Criado 22 de março de 2009
Ultima resposta 23 de mar. de 2009
Respostas 4
Participantes 4