Ir para conteúdo

POWERED BY:

Arquivado

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

norderzon

[Resolvido]  arquivos

Recommended Posts

oi

estou a fazer um programa que vai listar directorias e ler um ficheiro especifico de cada directoria

Eu so preciso de listar 2 linhas de cada ficheiro e não consigo fazer

 

há alguma funcao para listar linhas especificas de um ficheiro?

 

Parte do meu codigo

 

dir=opendir("/proc");

for(i=0;i<MAX_ENTRIES && (entry=readdir(dir))!=NULL;i++)
{
  val=strtol(entry->d_name,NULL,10);
  if(val!=0)
  {
	 printf("directoria: %ld",val);
	 sprintf(aux,"%ld",val);
	 sprintf(path,"%s/%s",proc,aux);
	 sprintf(real_path,"%s/%s",path,status);
	 
	 f=fopen(real_path,"r");

	 while(fgets(linha,100,f)!=NULL)
	 {

/*aki so preciso de 2 linhas especificas e nao do ficheiro todo*/

		 printf("Linha: %s",linha);
	 }
  }
  fclose(f);
}
closedir(dir);

Agradeço qq ajuda

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu problema é k o ficheiro vai ter umas 30 linha e eu só preciso da 2 e da 16

 

com o meu codigo eu listo todas e uso o fgets

 

fseek ja pesquisei mas so encontro exemplos para o fim do ficheiro que no meu caso não é o desejado

 

e possivel arranjar um exemplo do fseek ou outra maneira de usar o fgets

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://www.cplusplus.com/reference/clibrar...tdio/fseek.html

 

 

Você só vai poder usar fseek() se souber o número de caracteres em cada linha, pois você tem que mover o ponteiro segundo o número de bytes

Compartilhar este post


Link para o post
Compartilhar em outros sites

vi o seu link e penso que o fseek() não é a função que preciso para listar a 2 e 16 linha de um arquivo

 

há outra maneira de fazer com o fgets() ou outra funcao qualquer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

fgets

Syntax:

#include <stdio.h>

char *fgets( char *str, int num, FILE *stream );

 

The function fgets() reads up to num - 1 characters from the given file stream and dumps them into str. fgets() will stop when it reaches the end of a line, in which case str will be terminated with a newline. If fgets() reaches num - 1 characters or encounters the EOF, str will be null-terminated. fgets() returns str on success, and NULL on an error.

Imagino que sim. É só ir lendo que ele vai lendo por linhas. Mas lembre-se de verificar se o último caractere da string lida é \0, pois isso indica que provavelmente tem mais coisas na linha e isso significa que não leu uma linha inteira. Não tenho certeza sobre o funcionamento do bagulho, mas imagino que seria útil também verificar se o penúltimo caractere é \n, não sei direito como funciona a função mas imagino que depois do \n viria um \0 que termina a string, e no caso o bagulho poderia te enganar e tu achar que não leu uma linha toda, mas leu.

Mas, como eu disse, não sei como funciona, tem que esperar o pessoal que sabe direitinho responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pelas respostas

consegui resolver o meu problema

usei um contador de linhas e uns ifs, simples mas funcionou bem

 

aqui vai o codigo pode ser que ajude alguem

 

f = fopen(real_path,"r");
contador=0;
/*leitura de ficheiro*/
while(fgets(linha,100,f) != NULL)
{
	 /*linha do name*/
	 if(contador==0){
		  strcpy(nome,linha);
	 }
	/*linha do state*/
	 if(contador==16){
		  strcpy(state,linha);
		  strncpy(estado,state+7,13);
	 }
contador++;
}
fclose(f);

precisava da informação da linha 1 e da linha 16 guardo numa variavel e depois imprimo noutro lado

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.