Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Herculano

[Resolvido] Problema: Pegar string em um arquivo e separar

Recommended Posts

Galera to precisando pegar um string de um arquivo sequencial e separa em duas strings e converter para inteiro.

A terceira linha em diante é um labirinto que será alocado em uma matriz.

 

O arquivo é assim :

---------------------------

ARQUIVO 3

10 31

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

x x x b x xp x p x

x x x xxxx xxxxxx x x xx x x x

x x x px x x x x x

xpx x xxxx xxx p x xxxxxp x

x xxx x xxxxx x xpx x x x

x x x x xx x x x xxx x

x xbx p x x x xxxx xb x x

x x xxox x x x p xx x

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

---------------------------

O que eu preciso e pegar a linha 10 31 separa la ficando assim

int row=10

int column=31

 

Segue abaixo como eu tentei fazer

 

#include <string>
#include<iostream>
using namespace std;
#include<stdio.h>

#include "Robo.h"


Labirinto*  AlocaLabirinto(Labirinto *lab,FILE *arquivo)
{
	  char captura[11],auxRow,auxColumn;
	  fgets(lab->nome,9,arquivo);
	  fgets(captura,11,arquivo);
	  int tam = strlen(captura);
	  int j=tam;
	  for(int i =0; i< tam;i++)
	  {   
		  if ((captura[i]!=" ") && (i < j))
			 strcat(auxRow,captura[i]);
		  else  
			 j=i;
		  if(i > j)
			 strcat(auxColumn,captura[i]);				
	  }
	  lab->row= atoi(auxRow);
	  lab->column=atoi(auxColumn);
	  
	  lab->EstruturaLab=(char**) malloc(lab->row * sizeof(char*)); //Aloca o vetores de ponteiros(linhas).
	  for(int i=0;i < lab->row;i++)
	  {
			  lab->EstruturaLab[i]=(char*) malloc(lab->column* sizeof(char)); //Aloca em cada posicão do vetor um vetor de ponteiros.(colunas).
	  }
	  for(int i=0; i < lab->row;i++)
	  {
		  for(int j=0;j < lab->column;j++)
		  {
			   lab->EstruturaLab[i][j]=fgetc(arquivo);
		  }
	  }		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar o fscanf logo no início da leitura do arquivo para pegar os dois valores do início:

fscanf(arquivo, "%d %d", ...);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu mudei o cógido e ficou assim a primeira linha do arquivo eu consegui pegar normal mas a segunda eu naum consigui.

Eu compilo td certinho mais qd eu vou rodar ele fecha a aplicação e acusa um erro.Tentei imprimir a variavel onde eu estava alocando porém naum imprimiu nada. Gostaria de saber se o fscanf só captura string ? ou eu posso captrura inteiros também. Segue o código.

 

#include <string>
#include<iostream>
using namespace std;
#include<stdio.h>

#include "Robo.h"


Labirinto*  AlocaLabirinto(Labirinto *lab,FILE *arquivo)
{
	  int auxRow,auxColumn;
	  cout << "teste1" << endl;
	  fgets(lab->nome,9,arquivo); //Armazena a primeira linha do arquivo TP3ROBO
	  cout << lab->nome << endl;
	  fscanf(arquivo,"%d %d",auxRow,auxColumn); // Armazena o número de linhas e colunas (segunda linha do arquivo)
	  cout << auxRow << endl;
	  lab->row=auxRow;
	  lab->column=auxColumn;
	  lab->EstruturaLab=(char**) malloc(lab->row * sizeof(char*)); //Aloca o vetores de ponteiros(linhas).
	  for(int i=0;i < lab->row;i++)
	  {
			  lab->EstruturaLab[i]=(char*) malloc(lab->column* sizeof(char)); //Aloca em cada posicão do vetor um vetor de ponteiros.(colunas).
	  }
	  for(int i=0; i < lab->row;i++)  // Anel para percorrer as linhas da matriz alocada
	  {
		  for(int j=0;j < lab->column;j++)  //Anel para percorrer as colunas da matriz alocada
		  {
			   lab->EstruturaLab[i][j]=fgetc(arquivo); // Comando para armazenar caracter por caracter na matriz alocada.
		  }
	  }		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

do jeito q o josé mostrou ele captura inteiros

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui aki eu estava utilizando a função de forma errada.

 

fscanf(arquivo,"%d %d",auxRow,AuxColumn); // modo como eu estava usando.

 

 

fscanf(arquivo,"%d %d",&auxRow,&AuxColumn); // modo correto de usar a função

 

 

Eu estava esquecendo da referencia.

 

 

Valew galera vcs ajudaram muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera to precisando de mais uma coisa.

Preciso pegar o numero de linhas e o numero de colunas do arquivo.

 

To pesando em fazer assim

 

while(!feof(arquivo))
		{
			if (fgetc(arquivo)=="\n")	
				rowConfere++;
			else
			{
				position=fgetc(arquivo);
				columnConfere++;
			}
		}

 

Resumindo eu tenho que conferir se o numero de linhas e colunas do arquivo é igual ao desejado para a manipulação do programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.