•m4xxxy
Strain
Karma: -1
Deconectat
Mesaje: 4
|
 |
« : Februarie 03, 2013, 12:36:07 » |
|
este vorba despre o operatie mai complexa ce vreau sa o scriu in C++ despre ce e vorba? am 2 fisiere text cu vreo 3000 si cv de linii fiecare si vreau sa fac urmatoarea operatie : -din primul fisier text sa se copieze de pe prima linie pana la egal intro variabila a, si sa se retina si ce e dupa primu egal pana la primul punct si virgula ( ; ) intro variabila b , pe urma sa se caute in tot fisieru al doilea text ce e in variabila a si sa se inlocuiasca pe linia pozitionata ce e intre = si punct si virgula( ; ) exact ce s-a retinut in variabila b ...si asa mai departe pana se termina toate liniile din fisieru 1.... am atasat o poza cu cele 2 texte (o mica parte) . In partea dreapta e fisieru 1 ce trebuie copiat si inlocuit in fisieru 2 din stanga .. cateodata liniile nu coincid intotdeauna si de aceea trebuie cautat in fisieru 2 ... de fapt in fisieru 1 am traducerea in romana si trebuie sa o inlocuiesc pe cea in engleza din fisieru 2... fara ca celelalte limbi sa fie afectate... si inca o chestie ... mai poate sa apara modificari... sa nu se gaseasca ce am copiat din a si vrem sa gasim in b si atunci sa treaca algoritmul mai departe dak nu a gasit de inlocuit de ex la linia 7 in loc de hunting skill sa imi apara abilitati de vanatoare cu tot cu diacritice ... repet liniile nu sunt intotdeauna identice de aceea trebuie cautat in fisieru 2 ... IDEI??? http://s17.postimage.org/j31o1c4rj/fis.jpg
|
|
|
Memorat
|
|
|
|
•vlad_D
Client obisnuit

Karma: 32
Deconectat
Mesaje: 67
|
 |
« Răspunde #1 : Februarie 09, 2013, 09:34:04 » |
|
Idei?
Poi ai cam explicat tot algoritmul. Ce te opreste sa-l implementezi?
P.S: Daca fiserele sunt asa mici ai putea sa citesti al doilea fisier in memorie. Si il tii intr-un map<string, string> (m[a] = b). Apoi citesti primu fisier linie cu linie si te uiti in map. si afisezi in al 3-lea fisier. Ai putea sa rescrii primu fisier dar iti recomand sa scrii in al 3-lea fisier ca sa nu iti strici primu fisier din cauza unui bug.
Incearca sa implementezi, si faci un fisier mai mic intai si testezi daca merge. spor la implementat.
|
|
|
Memorat
|
|
|
|
•plastik
Strain
Karma: -3
Deconectat
Mesaje: 3
|
 |
« Răspunde #2 : Februarie 09, 2013, 10:33:56 » |
|
Ștefan, cred că ce vrei tu să faci e cel mai simplu rezolvat cu o expresie regulată. O dată ce ai stabilit o linie pe care vrei să faci înlocuirea, poți să faci replace pe (ceva ca) "=[\w| ]+;" (unde \w potrivește un cuvânt, similar cu [a-zA-Z]+) din fișierul 2 cu stringul pe care ai făcut match din fișierul 1 (cu aceeași expresie regulată).
Pentru asta, dacă folosești C++ ai nevoie de o bibliotecă suplimentară (Boost de exemplu) sau poți folosi noul header <regex> dacă folosești C++11. Și, încearcă întâi în ceva ca Python/Javascript ca să poți testa interactiv expresia regulată și să te asiguri că potrivește ce trebuie.
Succes!
|
|
|
Memorat
|
|
|
|
•m4xxxy
Strain
Karma: -1
Deconectat
Mesaje: 4
|
 |
« Răspunde #3 : Februarie 09, 2013, 19:17:58 » |
|
pai ideea era sa ma ajutati cu algoritmul
|
|
|
Memorat
|
|
|
|
•vlad_D
Client obisnuit

Karma: 32
Deconectat
Mesaje: 67
|
 |
« Răspunde #4 : Februarie 09, 2013, 20:21:27 » |
|
cu implementarea te referi?
|
|
|
Memorat
|
|
|
|
•m4xxxy
Strain
Karma: -1
Deconectat
Mesaje: 4
|
 |
« Răspunde #5 : Februarie 09, 2013, 20:24:01 » |
|
ma refer tot programu scris in c++ adik codu sa il bag in compilator... sa discutam eventualele erori care pot aparea
|
|
|
Memorat
|
|
|
|
•vlad_D
Client obisnuit

Karma: 32
Deconectat
Mesaje: 67
|
 |
« Răspunde #6 : Februarie 09, 2013, 20:34:01 » |
|
 Poi nu cred ca forumul asta e pentru asa ceva... sa vii sa ceri implementari de la altii. Te ajuta lumea la idei, mici pasaje de cod.. dar pune mana la scris.. e mult mai benefic pentru tine oricum. Eu unul n-am sa iti scriu codul c++. 
|
|
|
Memorat
|
|
|
|
•m4xxxy
Strain
Karma: -1
Deconectat
Mesaje: 4
|
 |
« Răspunde #7 : Februarie 09, 2013, 20:38:07 » |
|
dak as fii stiut C++ la nivel inalt l-as fi facut singur, dar cum stiu doar cin if for si cateva sintaxe de liceu imi e foarte greu sa fac ce mi-am propus
|
|
|
Memorat
|
|
|
|
•fdproxy
Strain
Karma: 10
Deconectat
Mesaje: 30
|
 |
« Răspunde #8 : Februarie 11, 2013, 16:01:19 » |
|
Fisierele par a fi in format "ini". Asta insemana ca fisierul este impartit in sectiuni al caror inceput este marcat de numele sectiunii in paranteze patrate: [Section] In cadrul unei sectiuni pe fiecare linie este definita o asociere intre o cheie si un sir: Key=String Fisierele "ini" pot fi citite cu functii Windows API (GetPrivateProfileString). Valoare "String" din descrierea de mai sus poate fi procesata cu ajutorul unui "tokenizer". Incerca "strtok", de exemplu ( http://www.cplusplus.com/reference/cstring/strtok/). Daca sirul analizat este mai complex, poti incerca un "scanner" (gasesti un exemplu in Stroustrup, The C++ Programming Language). Succes.
|
|
|
Memorat
|
|
|
|
•romyk
Strain
Karma: 5
Deconectat
Mesaje: 40
|
 |
« Răspunde #9 : Februarie 11, 2013, 21:15:20 » |
|
am incercat eu sa o fac  nu stiu daca e bine dar macar am incercat #include<iostream> #include<fstream> #include<string.h> #include<malloc.h> using namespace std; fstream f1("text1.txt",ios::in); fstream f2("text2.txt",ios::in); fstream g("text3.txt",ios::out);
char *a[3000],*b[3000],*a1,*b1;
char str2[1000],str[1000]; int i=0,j,lines; char * pch1,*p;
void search_and_change(char *x,char *y) { int ok=1; for(int l=1;l<=lines&&ok;l++) if(strcmp(x,a[l])==0) {g<<b[l]<<";";ok=0;} if(ok==1) g<<y<<";";
} int main(void) {while(!f1.eof()) { i++; f1>>str; pch1 = strtok (str,"="); a[i]=(char *)malloc(strlen(pch1)+1); strcpy(a[i],pch1); pch1 = strtok (NULL, "="); b[i]=(char *)malloc(strlen(pch1)+1); strcpy(b[i],pch1); b[i]=strtok(b[i],";");
} lines=i; free(pch1); while(!f2.eof()) { f2>>str; p = strtok(str,"="); a1=(char *)malloc(strlen(p)+1); strcpy(a1,p); g<<a1<<"="; p = strtok (NULL, "="); b1=(char *)malloc(strlen(p)+1); strcpy(b1,p); b1=strtok(b1,";"); search_and_change(a1,b1); b1 = strtok (NULL, ";"); while (b1 != NULL) { g<<b1<<";"; b1 = strtok (NULL, ";"); } g<<endl; free(b1);free(a1); }
return 0; }
|
|
|
Memorat
|
|
|
|
|