euMesmo2 0 Denunciar post Postado Junho 11, 2009 //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
José Enésio 4 Denunciar post Postado Junho 11, 2009 Qual(is) erros o compilador acusou? Compartilhar este post Link para o post Compartilhar em outros sites
euMesmo2 0 Denunciar post Postado Junho 11, 2009 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
_Isis_ 202 Denunciar post Postado Junho 12, 2009 Usou um debugger p/ ver onde ele pára? Breakpoint 2, main () at gerador.cpp:2828 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
José Enésio 4 Denunciar post Postado Junho 12, 2009 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
euMesmo2 0 Denunciar post Postado Junho 12, 2009 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
VictorCacciari 42 Denunciar post Postado Junho 12, 2009 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
José Enésio 4 Denunciar post Postado Junho 12, 2009 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
euMesmo2 0 Denunciar post Postado Junho 13, 2009 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
_Isis_ 202 Denunciar post Postado Junho 13, 2009 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
euMesmo2 0 Denunciar post Postado Junho 13, 2009 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
_Isis_ 202 Denunciar post Postado Junho 13, 2009 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
euMesmo2 0 Denunciar post Postado Junho 13, 2009 Escreva direito... O arquivo é sem quebra de linhas? Sim e isoo mesmo. Desculpe, não sabia o termo tecnico para isso. :D Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 13, 2009 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
euMesmo2 0 Denunciar post Postado Junho 14, 2009 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
José Enésio 4 Denunciar post Postado Junho 14, 2009 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
euMesmo2 0 Denunciar post Postado Junho 14, 2009 Obrigado pela ajuda. Agora, finalmente o programa roda corretamente. Compartilhar este post Link para o post Compartilhar em outros sites