Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

łączenie dwóch plików txt w c++

przemek905 17 Maj 2011 18:17 2295 3
  • #1 17 Maj 2011 18:17
    przemek905
    Poziom 2  

    Witam!
    Proszę o pomoc, mam dwa pliki tekstowe: jeden, który zawiera nr zamowienia, opis zamowienia oraz warunki gwarancji oraz drugi plik, ktory codziennie sie zmienia i zawiera nr zamowienia, date i godzine zaowienia.(petle do czytania co jest co mam i mysle zeby laczyc jakos po numerze zamowienia ktore beda zmiennymi) Sprawa polega na tym zeby polaczyc te dwa pliki w jeden zeby bylo nr zamowienia i od razu po tym data, godzina, opis i gwarancja. Taki pliczek planuje sobie wrzucic do zaplanowanych zadan w windowsie zeby raz dziennie robil taki zlepek, tylko za cholere nie wiem jak polaczyc te dwa pliki zeby do konkretngo numeru zamowienia przypisalo konkretny opis i wyrzucilo do trzeciego pliku. Z góry dzięki za jakieś pomysły lub najbardziej by sie przydal fragment kodu co przydziela dane z jednego pliku do drugiego.

    Prosciej wiec:
    Chodzi o to ze w pierwszym pliku jest cos takiego np:
    1234 opis1 gwarancja1
    1235 opis2 gwarancja2

    a w drugim pliku:

    1234 12/07/2012 12:03
    1235 12/07/2012 16:03

    chodzi o to zeby zrobic trzeci plik aby wygladal tak:
    1234 12/07/2012 12:03 opis1 gwarancja1
    1235 12/07/2012 16:03 opis2 gwarancja2

    Przy czym plik piwerszy sie nie zmienia bo zawiera dane ktore sie nie zmieniaja, a drugi zmienia sie raz dziennie.

    0 3
  • #2 19 Maj 2011 02:24
    mungo
    Poziom 18  

    Przy założeniu że wszystko wygląda tak jak kolega podał czyli w jednym i drugim pliku jest nr i po 2 pojedyncze ciągi znaków mogło by to wyglądać mniej więcej tak:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    ale raczej po jednym wyrazie tam niema tak że trzeba pokombinować z rozróżnianiem poszczególnych "działow" (albo taka sam liczba wyrazów może jakiś separator miedzy opisem i gwarancja) i zmienić trochę program

    0
  • #3 19 Maj 2011 16:59
    przemek905
    Poziom 2  

    Chcialem zrobic prosciej ale sie okazalo ze ten plik co sie zmienia codziennie ma troche inna budowe a mianowicie cos takiego:

    (001da7b5)16/05/11 00:52:27 001001M|00/11/-/---|=2:2000=INT-IP Ethernet error code 2 (status 1 0 0x00 0x00 0x00)
    (001da7b6)16/05/11 00:53:37 001001M|00/11/-/---|=2:2001=INT-IP Ethernet error code 2 (status 1 0 0x00 0x00 0x00)
    (001da7b7)16/05/11 00:54:03 001001M|00/11/-/---|=4:2002=Boot event 3, status:0,0,0
    (001da7b8)16/05/11 00:55:14 001001M|00/11/-/---|=2:2000=INT-IP Ethernet error code 2 (status 1 0 0x00 0x00 0x00)
    (001da7b9)16/05/11 00:56:24 001001M|00/11/-/---|=2:2002=INT-IP Ethernet error code 2 (status 1 0 0x00 0x00 0x00)



    i dlatego nie jest tak latwo wyciagnac tych wartosci co mnie interesuja czyli daty godziny i numeru bo reszta mnie nie interesuje i nie umiem tego tak prosto zrobic.
    z drugim plikiem jest prosciej bo wyglada tak(fragmentnumerow 2000, 20001,2002):do tego nie zawsze sa po koleji np czasem jest opuszczone duzo numerow.

    2000 " Critical IO1 driver not responding"
    "Failure of the IO1 driver start"
    "Bad IO1 initialization owed to a software version incoherence."
    "Reset of the CPU-IO1 block, unusable as it is. Cyclically, the reset might be"
    "activated again, for the situation could not have changed on its own."
    "Check the versions of the installed software.";
    2001 " Major No identity of IO1 is coming";
    2002 " Critical Not answer from the download of IO1"
    "IO1 board download has failed"
    "When the IO1 board appears, the telephone task requests the download of"
    "the board IO1. The download takes over to ensure the download. When this"
    "is over, the download sends a report of the download (OK or KO). The"
    "incident appears if the telephone task receives no report from the download."
    "The initialization of IO1 stops and the system cannot start."
    "Check whether the download task has been executed (command ps). The incident"
    "may be preceded by incident IO1 or by download (incident 2500 to 2523). Note"
    "these incidents too.";

    i numer i opis sie jakos wyciagnie ale nie wiem jak z tym pierwszym .
    Nie mam juz zadnego pojecia naprawde jak to napisac i polaczyc...

    0
  • #4 20 Maj 2011 12:31
    przemek905
    Poziom 2  

    #include<stdio.h>
    #include<conio.h>
    #include<iostream>
    #include<Math.h>
    #include<string>
    #include<fstream>
    #include<cstdlib>
    using namespace std;

    int main(void)
    {
    fstream plik_dane("C:\\Documents and Settings\\ania\\Pulpit\\raport.txt",ios::out);
    fstream plik("C:\\Documents and Settings\\ania\\Pulpit\\inc.txt",ios::in);
    if (plik.good()==true){
    cout<<"Uzyskano dostep do pliku"<<endl;}
    string dane[3000],nr_alarmu[3000],opis[18000],nr_alarm[18000];
    int liczba_wierszy=0,i,liczba[3000],liczba2[18000];

    char cos[9999];
    do {
    plik.getline(cos,sizeof(cos));
    liczba_wierszy++;}
    while(!plik.eof());


    plik.close();
    fstream plik2("C:\\Documents and Settings\\ania\\Pulpit\\inc.txt",ios::in);


    for(i=0;i<=liczba_wierszy;i++){

    getline( plik2, dane[i] );

    }
    //cout<<dane[0];
    for(i=1;i<liczba_wierszy-1;i++)
    {
    dane[i].erase(84,140-84);
    dane[i].erase(55,71-55);
    dane[i].erase(28,51-28);
    dane[i].erase(0,10-0);
    if(dane[i].find("error")==string::npos)
    dane[i].erase(22,51-22);

    //cout<<dane[i]<<endl;
    }
    for(i=1;i<liczba_wierszy-1;i++)
    {

    nr_alarmu[i]=dane[i].erase(22,50-22);
    nr_alarmu[i].erase(0,18-0);
    liczba[i] = atoi(nr_alarmu[i].c_str());
    //plik_dane<<liczba[i]<<endl;
    //cout<<nr_alarmu[i]<<endl;

    }



    fstream plik3("C:\\Documents and Settings\\ania\\Pulpit\\incbaza.txt",ios::in);

    if (plik3.good()==true){
    cout<<"Uzyskano dostep do pliku3"<<endl;}

    float liczba_lini=0;

    int j;

    char coscos[999999];
    do {
    plik3.getline(coscos,sizeof(coscos));
    liczba_lini++;}
    while(!plik3.eof());

    cout<<"liczba lini "<<liczba_lini<<endl;

    plik3.close();
    fstream plik4("C:\\Documents and Settings\\ania\\Pulpit\\incbaza.txt",ios::in);


    for(j=0;j<=liczba_lini;j++){
    for(j=0;j<=liczba_lini;j++){
    getline( plik4, opis[j],';' );
    nr_alarm[j]=opis[j];
    nr_alarm[j].erase(5,4294967295-4);
    liczba2[j] = atoi(nr_alarm[j].c_str());
    //plik_dane<<liczba2[j]<<endl;
    //plik_dane<<nr_alarm[j]<<endl;
    //plik_dane<<opis[j]<<endl;
    break;}break;}



    for (i=1;i<liczba_wierszy;i++)

    {
    for (j=0;j<=liczba_lini;j++)


    {
    if (liczba[i]==liczba2[j]){


    plik_dane<<dane[i]<<opis[j]<<endl;
    // cout<<opis[j]<<endl;
    // getch();
    }
    break; } break;
    break;}


    plik2.close();
    plik4.close();
    plik_dane.close();


    getch();
    return 0;
    }


    ostatni if nie dziala, nie mam pojecia dlaczego, ktos cos podpowie?

    0