Che Posted January 1, 2015 Report Posted January 1, 2015 Am codul asta:#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <regex>#include <fstream>#include <string>using namespace std;string delSpaces(string &str){ str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); return str;}int main(){ string line; ifstream myfile; myfile.open("data.txt"); if (myfile.is_open()) { while (getline(myfile, line)) { delSpaces(line); ifstream secondfile; //deschide fisierul pentru a scrie, fara verificari etc. secondfile.open("second.txt"); secondfile >> "LINE:" >> line >> "\n"; //cout << "User name:" << line << '\n'; } myfile.close(); } else{ cout << "Unable to open file.\n"; exit(EXIT_FAILURE); } system("PAUSE"); return 0;}Programul ar trebui sa deschida un fisier data.txt si sa il citeasca si apoi sa scrie fiecare linie citita intr-un alt fisier second.txt. Fisierul data.txt contine ceva, fisierul second.txt este gol. In final, second.txt si data.txt vor fi identice, avand acelasi continut (exceptand faptul ca second va avea in dreptul fiecarei linii scris cuvantul "LINE:" si ca liniile vor fi fara space.Problema e ca nu mi se compileaza. Imi da eroarea asta:error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const char [6]' (or there is no acceptable conversion)Am cautat pe net si vad ca toti spun ca trebuie inclus #include <string>. Chestia e ca la mine e deja inclus si tot primesc eroarea asta. Care sa fie problema ?Multumesc ! Quote
H3xoR Posted January 1, 2015 Report Posted January 1, 2015 Am codul asta:#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <regex>#include <fstream>#include <string>using namespace std;string delSpaces(string &str){ str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); return str;}int main(){ string line; ifstream myfile; myfile.open("data.txt"); if (myfile.is_open()) { while (getline(myfile, line)) { delSpaces(line); ifstream secondfile; //deschide fisierul pentru a scrie, fara verificari etc. secondfile.open("second.txt"); secondfile >> "LINE:" >> line >> "\n"; //cout << "User name:" << line << '\n'; } myfile.close(); } else{ cout << "Unable to open file.\n"; exit(EXIT_FAILURE); } system("PAUSE"); return 0;}Programul ar trebui sa deschida un fisier data.txt si sa il citeasca si apoi sa scrie fiecare linie citita intr-un alt fisier second.txt. Fisierul data.txt contine ceva, fisierul second.txt este gol. In final, second.txt si data.txt vor fi identice, avand acelasi continut (exceptand faptul ca second va avea in dreptul fiecarei linii scris cuvantul "LINE:" si ca liniile vor fi fara space.Problema e ca nu mi se compileaza. Imi da eroarea asta:error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const char [6]' (or there is no acceptable conversion)Am cautat pe net si vad ca toti spun ca trebuie inclus #include <string>. Chestia e ca la mine e deja inclus si tot primesc eroarea asta. Care sa fie problema ?Multumesc !Nu este bun? „direc?ia”. Rezolvarea ar fi s? schimbi >> în <<.Îns? asta nu e tot. Gânde?te-te c? tu deschizi fi?ierul ?la într-un while ceea ce nu e tocmai ok.Dac? n-ai în?eles, d?-mi PM. Quote
botulnr2 Posted January 1, 2015 Report Posted January 1, 2015 (edited) Am codul asta:#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <regex>#include <fstream>#include <string>using namespace std;string delSpaces(string &str){ str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); return str;}int main(){ string line; ifstream myfile; myfile.open("data.txt"); if (myfile.is_open()) { while (getline(myfile, line)) { delSpaces(line); ifstream secondfile; //deschide fisierul pentru a scrie, fara verificari etc. secondfile.open("second.txt"); secondfile >> "LINE:" >> line >> "\n"; //cout << "User name:" << line << '\n'; } myfile.close(); } else{ cout << "Unable to open file.\n"; exit(EXIT_FAILURE); } system("PAUSE"); return 0;}Programul ar trebui sa deschida un fisier data.txt si sa il citeasca si apoi sa scrie fiecare linie citita intr-un alt fisier second.txt. Fisierul data.txt contine ceva, fisierul second.txt este gol. In final, second.txt si data.txt vor fi identice, avand acelasi continut (exceptand faptul ca second va avea in dreptul fiecarei linii scris cuvantul "LINE:" si ca liniile vor fi fara space.Problema e ca nu mi se compileaza. Imi da eroarea asta:error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const char [6]' (or there is no acceptable conversion)Am cautat pe net si vad ca toti spun ca trebuie inclus #include <string>. Chestia e ca la mine e deja inclus si tot primesc eroarea asta. Care sa fie problema ?Multumesc !e gresit modul in care ai declarat file streamu.Pentru a scrie trebuie sa folosesti:ofstream file("fisier.txt"); in loc de ifstream care e pentru citire.// si cum zicea h3xor , fisierul trebuie deschis doar odata , inaintea loop-ului while , si inchis dupa loop Edited January 1, 2015 by botulnr2 Quote
Che Posted January 1, 2015 Author Report Posted January 1, 2015 @botulnr2Vad ca ziceti ca e ceva in neregula si cu logica/pasii codului.Eu am gandit asa:1. Deschis fisierul ce trebuie citit.2. Deschid si fisierul ce trebuie scris.3. Citesc cate o linie din primul fisier si o bag in al doilea fisier. Ca altfel nu am cum sa stochez si sa modific toate liniile in acelasi timp, trebuie cate o linie la un moment dat.Cum trebuia de fapt sa fie codul ?Multumesc ! Quote
botulnr2 Posted January 1, 2015 Report Posted January 1, 2015 (edited) 1) deschizi fisierele2) cat timp ai linii de citit(sau cat timp nu ai intalnit EOF() ) citesti linia si o scrii in fisierul 23) inchizi fisiereleAi gandit corect dar ai scris gresit.#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <regex>#include <fstream>#include <string>using namespace std;string delSpaces(string &str){ str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); return str;}int main(){ string line; ifstream myfile; myfile.open("data.txt"); if (myfile.is_open()) { ofstream secondfile; secondfile.open("second.txt"); while (getline(myfile, line)) { delSpaces(line); //deschide fisierul pentru a scrie, fara verificari etc. secondfile << "LINE:" << line << "\n"; //cout << "User name:" << line << '\n'; } myfile.close(); secondfile.close(); } else{ cout << "Unable to open file.\n"; exit(EXIT_FAILURE); } system("PAUSE"); return 0;} Si cred ca fisierul al doilea trebuie deschis ca si Append , pentru ca in fisierul 2 v-a apararea decat ultima linie scrisa . Edited January 1, 2015 by botulnr2 1 Quote