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");
}