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

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

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.

[quote=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.

[/quote]

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

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:

[code]
import java.io.;
import java.util.
;

public class LerTexto{
public static void main(String[] asdf){
List inteiros = new ArrayList();
List strings = new ArrayList();

	//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();
	}
}

}[/code]

Ate mais.

[quote=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[/quote]

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 <fstream>
#include <iostream>
#include <string>
#include <vector>

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 <Cliente> clientes;
public:
    void ler (const string& nomeArquivo)
    {
        string nome; int valor1, valor2, valor3;
        ifstream arqEntrada (nomeArquivo.c_str());
        while (arqEntrada)
        {
            arqEntrada >> nome >> valor1 >> valor2 >> 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 < clientes.size(); ++i) 
        {
            cout << clientes[i].nome << "," << clientes[i].valor1 << "," << clientes[i].valor2 << "," << clientes[i].valor3 << endl;
        }
    }
};

int main (int argc, char *argv[])
{
    TesteLeitura tl;
    tl.ler("teste.txt"); 
}