Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: putin ajutor nu ma descurc!!!  (Citit de 2073 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
m4xxxy
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« : 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 Deconectat

Mesaje: 67



Vezi Profilul
« 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 Deconectat

Mesaje: 3



Vezi Profilul
« 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 Deconectat

Mesaje: 4



Vezi Profilul
« 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 Deconectat

Mesaje: 67



Vezi Profilul
« Răspunde #4 : Februarie 09, 2013, 20:21:27 »

cu implementarea te referi?
Memorat
m4xxxy
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« 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 Deconectat

Mesaje: 67



Vezi Profilul
« Răspunde #6 : Februarie 09, 2013, 20:34:01 »

 Fighting
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++. Smile

Memorat
m4xxxy
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« 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 Deconectat

Mesaje: 30



Vezi Profilul
« 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 Deconectat

Mesaje: 40



Vezi Profilul
« Răspunde #9 : Februarie 11, 2013, 21:15:20 »

am incercat eu sa o fac Very Happy nu stiu daca e bine dar macar am incercat

Cod:
#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
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines