Ir ao conteúdo
  • Cadastre-se

C Ler Arquivo Texto e Transforma-lo Num Array Organizado


IzeraXD

Posts recomendados

💜 Eu quero que leia no arquivo txt pokemon e organizar
            [0] [0] = P ; [0] [1] = o ; [0] [2] = k ; [0] [3] = e ....

💜 Por Min Eu Faria Numa Função Separada

💜 Fiz Na Main e na função por que a função só tava retornando uma letra 

👾 ta pegando lixo de memória

👾 no começo do for  tem xo %s ta pegando normal porém quando sai do for no passo 3 e passo 4 vem o lixo de memória como nas imagens

# include <stdio.h>
# include <stdlib.h>
# include <string.h> 
// #include <locale.h> ; setlocale(LC_ALL,"Portuguese");
/* */
// prototipagens
 
int main (void){
   printf("  -------------- Mano VI ---------  \n ");
   //
  char Text_In_Array(int auu,int ayy, FILE *Text_Array_Inside ); // auu-->line ; ayy --> coluna
  // char Text_In_Array ( int  , FILE ); 
  FILE *Text_I;
  //Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r");
  // Variables
     
    printf(" Passo I \n \n");
    
    char *X_Rline =(char*) calloc(120,sizeof(char));
    char Text_II[300][300];
    char Text_III[300][300];
    int auu,p,i,ayy;
        
    // *X_Rline = Text_In_Array ( auu , Text_I );
    //(FILE*) Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")))
    // *X_Rline = Text_In_Array ( auu ,(FILE *Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")) ;
    // *X_Rline = Text_In_Array ( auu , (*Text_I = &(fopen("02,1 Lendo arquivos Textos A.txt","r")))) ;
    //  X_Rline = (char)*( Text_In_Array ( auu , Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r"))) ;
    
    // strcpy( Text_II ,(char*) ( Text_In_Array ( auu , (FILE*) (Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")))));
    // memcpy(Text_II,(char*) ( Text_In_Array ( auu , (FILE*) (Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r"))))),strlen(Text_II)-1* sizeof(char));
    // printf("\n Passo II \n \n");
    // printf(" tustus %s \n",&Text_II[0] );
    // printf(" tustus %s \n",&Text_II[1] );
    // printf(" tustus %s \n",&Text_II[2] );
    
    printf("\n The For passo 2,5 \n");
    
    
    // *X_Rline = (char*) ( Text_In_Array ( auu , (FILE*) (Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")))) ;
    //printf(" ---> %s <--- \n.",&Text_II);
    // printf("\n Passo III \n \n");
    // printf(" tustus %s \n",&X_Rline[0] );
    // printf(" tustus %s \n",&X_Rline[1] );
    // printf(" tustus %s \n",&X_Rline[2] );
    
    
    //% Text_II [i][p] = ( Text_In_Array ( auu , ayy ,(FILE*) (Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")))) ;
    //Text_II = (char*) ( Text_In_Array ( auu , (FILE*) (Text_I = fopen("02,1 Lendo arquivos Textos A.txt","r")))) ;
    //printf(" ---> %s <--- \n.",&Text_II);
   
    // *X_Rline = = ( Text_In_Array ( auu , ayy ,(FILE*) (Text_I = fopen("Read_Text_In_Array.txt","r")))) ;
    for ( p,i = 0; p <=9 ; p++ ) {  
      Text_II [i][p] = ( Text_In_Array ( auu , ayy ,(FILE*) (Text_I = fopen("Read_Text_In_Array.txt","r")))) ;
      printf(" xo %s .",&Text_II [i][p] );
      //fgets(Text_III[i][p],1,*(&Text_II [i][p]));
      //fgets(Text_III[i][p],1,"%s",&Text_II [i][p]);
      // Text_III[i][p] = (char*) ("%s",&Text_II [i][p] );
      //Text_III[i][p] = *(&Text_II [i][p]);
      ///strcpy(Text_III[i][p],"%s"&Text_II [i][p]);
      // strcpy(&Text_III[i][p],&Text_II [i][p]);
      strncpy(&Text_III[i][p],&Text_II [i][p],1);
      ayy++;
    }; 
    
    printf("\n \n --- Passo III --- \n \n");
    printf(" [0]tustus %s \n",&Text_II[0] );
    printf(" [1]tustus %s \n",&Text_II[1] );
    printf(" tustus %s \n",&Text_II[0][0] );
    printf(" tustus %s \n",&Text_II[0][1] );
    printf(" tustus %s \n",&Text_II[0][2] );
    printf(" tustus %s \n",&Text_II[0][3] );
    printf(" tustus %s \n",&Text_II[0][4] );
    printf(" tustus %s \n",&Text_II[0][5] );
    printf("\n \n --- Passo IV --- \n \n");
    printf(" keka %s \n",&Text_III[0][0] );
    printf(" keka %s \n",&Text_III[0][1] );
    printf(" keka %s \n",&Text_III[0][2] );
    printf(" keka %s \n",&Text_III[0][3] );
    printf(" keka %s \n",&Text_III[0][4] );
    printf(" keka %s \n",&Text_III[0][5] );
    printf(" keka %s \n",&Text_III[1][0] );
    printf(" keka %s \n",&Text_III[1][1] );
   //    
    
    fclose(Text_I);
    free(X_Rline);

    printf(" \n -------- Mano FIM -------- \n ");
    
    return(0);
};


char Text_In_Array(int auu,int ayy, FILE *Text_Array_Inside ){
    printf(" \n -------- Entro -------- \n ");
	// char *Text_Array_Inside =(char*) calloc(2000,sizeof(char));
    // FILE *Texto_Load = (*Text_Array_Inside); 
    // Texto_Load  ;
    char *Read_Line = (char*) calloc(120,sizeof(char));
    char *Copy_Read_Line =(char*) calloc(120,sizeof(char));
    char *Text_Read  =(char*) calloc(120,sizeof(char));
    // char Text_Read[4][4]; 
    // char Text_Read_I[4][4]; 
    
    for (int i = 0; i <=1 ; i ++){   
        fgets(Read_Line,120,Text_Array_Inside); // a cada fgets ler uma linha diferente 
        printf(" voce encontrou = %s",Read_Line);
        strcpy(Copy_Read_Line, Read_Line);
        for( int p=0; *(&Copy_Read_Line[p]) != '\n' ; p++) 
            strncpy( &Text_Read[p], &Copy_Read_Line[p],1);
        	//printf(" Into %s. \n ",&Text_Read[p]);
    	return Text_Read[ayy];
        
    }
    //strcpy(Text_Read_I, Text_Read);
    
    //return *(&Text_Read[i][p]);

};

 

 

 

image.png.0e73b26c53b7a7b4d29a448cee849ece.png 

 

Lixo

image.png.71d55dd9f2e4028cddeb930e310b7379.png

Read_Text_In_Array.txt

Link para o comentário
Compartilhar em outros sites

Seu programa não está bom. E está longe de ficar pronto.

 

A função retorna uma letra porque foi o que você declarou: retorna uma letra, char.

 

TODO programa C de certa forma faz o que você quer, e assim não precisa inventar nada. Basta fazer igual. É mais simples.

 

O protótipo de main() é

 

	int main( int argc, char* argv[])

 

Um vetor de strings. Todo programa C recebe isso. E é como ler o seu arquivo texto convertido em "matriz". Faça igual.

 

Sobre o programa:

  • use nomes mais expressivos para as variáveis. Pode ser bem melhor que auu e ayy
  • entenda que 12 printf de uma linha é centenas de vezes mais lerdo que um printf de 12 linhas. E é mais difícil de digitar, de ler e de alinhar. Porque todo mundo faz isso?
  • não precisa dessas funções todas. E muito menos dessas variáveis todas.
  • evite comentários óbvios como "declarações" 

 

 

Link para o comentário
Compartilhar em outros sites

8 horas atrás, arfneto disse:

A função retorna uma letra porque foi o que você declarou: retorna uma letra, char.

- já aprendi muito com muitas dicas tua

sim eu fiz isso devido ao lixo de memória veja a imagem com lixo de memória é assim que um arquivo txt é lido em c  ponto ,
- veja a imagem lixo de memória , já tentei guarda num ponteiro com um espaço de 1 caractere de char ;

 

meu problema não  é ler tudo por enquanto só quero ler a primeira linha e guarda porém se não estiver organizado num arrray não posso usar comparações ex text [0][3] == 'a'','b','c' etc é inutil
- é fácil falar na posição [0][0] tem a palavra completa porém é inutil para comparações
exemplo [0][0] pokemon == 'a'','b','c' etc é inutil

 

8 horas atrás, arfneto disse:

use nomes mais expressivos para as variáveis. Pode ser bem melhor que auu e ayy

sobre isso tava usando i e p porém depôs vou ter que fazer dois for sobrepostos para ler um txt inteiro

dentro e fora da função mas vou tentar fazer tudo dentro da função , fiz pra mandar só uma letra teoricamente deu certo mas no final no lixo  tava la
 

os 13 print f é usado pra fazer testes e no caso ver se o resultado ta como eu quero porém sim é código de teste que depôs vai  pro lixo se você n sabe o que esta acontecendo nunca vai funcionar

sim um for é muito mais pratico


queria um codigo que fisese tipo assim

array [0][0] = "%s" array II

Link para o comentário
Compartilhar em outros sites

18 horas atrás, IzeraXD disse:

sim eu fiz isso devido ao lixo de memória veja a imagem com lixo de memória é assim que um arquivo txt é lido em c  ponto

 

Não entendo o que significa

 

18 horas atrás, IzeraXD disse:

já tentei guarda num ponteiro com um espaço de 1 caractere de char ;

 

um ponteiro guarda um endereço. Só isso.

 

18 horas atrás, IzeraXD disse:

os 13 print f é usado pra fazer testes e no caso ver se o resultado ta como eu quero porém sim é código de teste que depôs vai  pro lixo se você n sabe o que esta acontecendo nunca vai funcionar

 

como expliquei, 13 printf de uma linha não tem sentido. Use um printf de 13 linhas. É mais fácil e centenas de vezes mais rápido.

 

Entendeu o que expliquei sobre main? Todo programa em C faz o que você quer fazer nesse. Ou ao  menos recebe pronta a lista de strings. Apenas faça igual.

 

18 horas atrás, IzeraXD disse:

queria um codigo que fisese tipo assim

array [0][0] = "%s" array II

 

também não entendi. Tente explicar de outro modo. Um exemplo talvez.

 

 

Acho que tem erros básicos, de conceitos, em seu programa. Você tem um livro? Uma apostila? Algo mais formal para estudar?

 

Vou mostrar um exemplo depois.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!