Ir para conteúdo

POWERED BY:

Arquivado

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

euMesmo2

[Resolvido] Gerador de lista em *.txt

Recommended Posts

//Retornou "Erro: Lista.txt não pode ser criado." e não criou arquivo "Lista.txt".

#include<iostream>

#include<fstream>

#include<string>

#include<string.h>

using namespace std;

void strToChar_array(string str, char* vetor)

{

short a;

for(a=0; str[a]!='\0'; a++)

{

vetor[a]=str[a];

}

for(; vetor[a]!='\0'; a++)

{

vetor[a]='\0';

}

}

int main()

{

short a;

char estado[3];

char* flag;

string auxiliar1, auxiliar2;

char auxiliar3[1024];

ifstream origem, inst;

fstream destino;

inst.open("Inst.txt");

if(!inst.is_open())

{cout<<"Erro: Inst.txt não pode ser encontrado.";}

destino.open("Lista.txt");

if(!destino.is_open())

{cout<<"Erro: Lista.txt não pode ser criado.";}

while(!inst.eof())

{

getline (inst,auxiliar1);

strToChar_array(auxiliar1, auxiliar3);

strncpy(estado, auxiliar3, 2);

origem.open(auxiliar3);

if(!origem.is_open())

{cout<<"Erro: "<< auxiliar1 <<" não pode ser encontrado.";}

estado[2]='\0';

while(!origem.eof())

{

getline(origem, auxiliar1);

strToChar_array(auxiliar1, auxiliar3);

flag=strstr(auxiliar3, "COL2=");

if(flag==0)

{continue;}

a=0;

for(flag=flag+6; *flag!='"'; flag++)

{

auxiliar2[a]=*flag;

a++;

}

destino<<"INSERT INTO ESTADO(nome, estado) VALUES ('"<<auxiliar2<<"', '"<<estado<<"');/n";

}

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual(is) erros o compilador acusou?

O compilador não acusou erro algum, mas na hora de rodar o programa, a mensagea de erro q coloquei para o caso de "Lista.txt" não abrir aparece e ele não cria o arquivo "Lista.txt". Ja tentei deixar o arquivo Lista.txt vazio na pasta para o programa abrir e, mesmo assim, não funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usou um debugger p/ ver onde ele pára?

 

Breakpoint 2, main () at gerador.cpp:28

28 if(!inst.is_open())

(gdb) p inst.is_open()

Couldn't find method ifstream::is_open

(gdb) s

29 {cout<<"Erro: Inst.txt não pode ser encontrado.";}

(gdb) c

Continuing.

 

E supostamente o programa não deveria terminar se o arquivo não for encontrado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, aqui ele parou de dar erro quando criei os arquivos, certifique-se que eles estão no mesmo diretório do executável. Se você quiser deixar isso por conta do programa, crie o arquivo com um ofstream, e então tente reabrir o arquivo (não se esqueça de fechar o arquivo do ofstream quando ele criar e então tentar abrir o arquivo denovo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu não entendi.

Troquei "destino" de fstream para ofstream, o que devia dar no mesmo, ja q fstream contem ofstream, e o programa criou o arquivo "Lista.txt"., não preencheu, mas pelo menos criou o arquivo. Alguem pode me explicar pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar fstream, no momento de abrir o arquivo deve especificar "ios::in" ou "ios::out"

não é a mesma coisa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

euMesmo2, a minha sugestão envolvia abrir o arquivo com fstream normalmente, e quando ele não abrir (no if ali), criar o arquivo criando uma instância de ofstream que já cria um novo arquivo. Não costumo usar os fstreams para manipulação de arquivos então não sei direito se não daria para fazer algo menos gambiarrístico com as flags? Abrindo um arquivo para escrita, fechar e abrir para leitura novamente funciona pra criar um arquivo quando não existe, apesar de soar meio gambiarra, vou esperar o pessoal sabido aqui do fórum esclarecer nessa questão :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi onde errei. A proposito, alguem sabe algum outro geito de extrair informação do arquivo sem o getline. Pq o getline so para qdo encontra um '/n' no arquivo e descobri que os arquivos que estou utilizando não têm '\n's. Assim, o getline fica muito extenso e, acho, que não vai caber na string.

Preciso de uma outra maneira para ler um arquivo de texto.

PS: Vou precisar trabalhar as informações nele da mesma maneira do programa acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites
getline() reads an entire line from stream, storing the address of the buffer containing the text into *lineptr. The buffer is null-terminated and includes

the newline character, if one was found.

 

#include <stdio.h>
int main() {
  FILE * fp = open("arq.txt","r");
  if (fp) {
  size_t tam;
  char * str = NULL;
  getline(&str, &tam, fp);
  printf("==%s",str);
  fclose(fp);
  }
}

 

linha 1

 

isis@linux-gy11:~/Imasters> ./a.out

==linha 1

 

Não sei se a cstdio tem esse getline.

Compartilhar este post


Link para o post
Compartilhar em outros sites

getline() reads an entire line from stream, storing the address of the buffer containing the text into *lineptr. The buffer is null-terminated and includes

the newline character, if one was found.

#include <stdio.h>
int main() {
   FILE * fp = open("arq.txt","r");
   if (fp) {
	  size_t tam;
	  char * str = NULL;
	  getline(&str, &tam, fp);
	  printf("==%s",str);
	  fclose(fp);
   }
}

linha 1

isis@linux-gy11:~/Imasters> ./a.out

==linha 1

Não sei se a cstdio tem esse getline.

 

O codigo acima me ajudou bastante, mas ele ainda me limita a "ler" uma linha toda e o arquivo que pretendo ler e continue, em uma linha só. Não tem um meio de faser o getline, ou outra função qualquer parar em outro ponto que não seja o fim da linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites
O codigo acima me ajudou bastante, mas ele ainda me limita a "ler" uma linha toda e o arquivo que pretendo ler e continue, em uma linha só.

 

Escreva direito...

O arquivo é sem quebra de linhas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só mapeando o arquivo em memória.

 

#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <errno.h>
int main() {
  const char * arq = "arq.txt";
  FILE * fp = fopen(arq,"r");

 if (fp) {
 struct stat tam;
 if (stat(arq, &tam) == -1) 
	 printf("%m\n");
 else {
	char * addr = mmap(NULL, tam.st_size, PROT_READ, MAP_PRIVATE, fileno(fp), 0);
	if (addr == MAP_FAILED)
	   printf("%m\n");
	else
	   printf("===> %s\n", addr);
 }
	 fclose(fp);
 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Custei, mas consegui. O programa ta criando e preenchendo o arquivo Lista.txt. O problema tava na função strToChar_array. Apaguei-a e ultilizei str.data() no lugar e funcionou.

Uma ultima duvida:

Como coloco aspas entre aspas? """ não funciona. A função que preciso usar recebe um *const" char como parametro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A aspa deve vir antecedida de uma contra-barra (\) para ser usada em uma string.

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.