Teilstring auslesen hilfee



  • Hallo,

    und zwar habe ich das problem das ich aus einer datei ein bestimmtes Wort auslesen will, was aber immer wieder Unterschiedlich ist.
    Das Programm soll ab ein "PJ" anfangen zu lesen und bei einen - Aufhörn zu lesen und das was dazwischen ist soll c++ mir in eine neue datei schreiben.
    Die Datei wo c++ rauslesen soll heißt zone.inf.
    Am besten wäre es wenn mir jemand einen Qbasic Quellcode in c++ umschreiben könnte, wir haben hier das Problem das Qbasic Programme nicht auf einen 64bit Rechner funktionieren und dieses Programm ist sehr wichtig und ich habe leider noch nicht die kenntnisse um es zu schreiben.

    hier ist mal das Qbasic Pogramm, aber es wäre mir auch schon sehr geholfen wenn mir jemand bei der obigen sache helfen könnte.

    open "i", #1, "zone.inf"
    input #1, x$
    x = LEN(x)k=INSTR(x) k=INSTR(x," PJ")
    if k=0 GOTO 1000

    for j=k+5 to x
    a=MID=MID(x,j,1)b,j,1) b=b+a+a
    i = i+1
    if asc(a$)=1 goto 200
    next

    200 c=MID=MID(b,1,i1)print"DieProjektnummerist:"+c,1,i-1) print"Die Projektnummer ist: "+c
    print "Die Projektnummer hat "+STR(i1)+"Zeichen"ifi1>6GOTO1001PN(i-1)+" Zeichen" if i-1>6 GOTO 1001 PN=c$
    if MID(c(c,i-1,1)="-" then
    d=LEFT=LEFT(c,i2)print"Projektnummervon:"+c,i-2) print "Projektnummer von: "+c+" auf: "+d+" ge„ndert" PN=d$
    END IF
    close #1

    AUSGABEDAT$ = PN$+".HNC"

    open "o",#2,AUSGABEDAT$
    print #2, "%"
    close #2

    print "----------------------------------------------------------"
    input "Dateien verknuepfen von";n1
    input " bis";n2

    for i=n1 to n2

    if i<10 then
    i="0"+RIGHT="0"+RIGHT(STR$(i),1)
    end if

    if i>=10 and i<100 then
    i=RIGHT=RIGHT(STR$(i),2)
    end if

    if i>=100 and i<1000 then
    i=RIGHT=RIGHT(STR$(i),3)
    end if

    if i>=1000 then
    goto 1002
    end if

    QUELLDAT$ = c+i+i+".HNC"
    print QUELLDAT$
    open "i",#3,QUELLDAT$
    open AUSGABEDAT$ for append as #2

    while not eof(3)
    input #3,NCSATZ$

    if NCSATZ="%" then print #2, "( Anfang Programm "+QUELLDAT+" )"
    GOTO 500
    end if

    if RIGHT(NCSATZ(NCSATZ,3)="M02" AND i=n2 then
    print #2,NCSATZ$
    print #2, "( Ende Programm "+QUELLDAT$+" )"
    GOTO 500
    end if

    if RIGHT(NCSATZ(NCSATZ,3)="M02" then
    print #2, "( Ende Programm "+QUELLDAT$+" )"
    GOTO 500
    end if

    if NCSATZ$="E" GOTO 500

    print #2,NCSATZ$

    500

    wend

    close #3
    close #2

    next

    open AUSGABEDAT$ for append as #2
    print #2, "E"
    close #2

    999 END

    1000 print "Abbruch wegen Fehler in Datei ZONE.INF"
    goto 999
    1001 print "Projektnummer hat mehr als 6 Zeichen. Dateinamen mit mehr als 8 Zeichen sind nicht m”glich"
    goto 999
    1002 print "Kann Dateien nicht verknuepfen. Programmnummer ist groesser als 999"
    goto 999
    1003 print "Falsche Eingabe! Abbruch."
    goto 999

    Danke



  • Wie wäre es wenn du dir den Code selber umschreibst?!
    Aber wieviel willst du denn zahlen das wir dir das umschreiben?



  • das Problem ist ich kann ihn nicht selbst umschreiben, leider fehlen mir die kenntnisse.

    hm und ich denke so wie es aussieht willst du wirklich geld dafür.
    ich dachte hier hilft jeder jedem.
    so würdest du das nicht machen oder?



  • string get_string_part(string str) {
      string neuer_string = "";
      int start = 0;
      for(int i=0;i<str.length();i++) {
        if ((str[i] == 'P') && (start==0) { 
        start++;
        }  
        else if ((str[i] == 'J') && (start==1) { 
        start++;
        }  
        else if (str[i] == '-')  { 
        start=0;
        }  
        else if (start == 2) {
        neuer_string.append(str[i])
        }
      }
      return neuer_string;
    }
    

    Ungetestet! Vom Prinzip her müsste es so funktionieren...



  • Mhh, passt noch nicht ganz so.
    So ist besser.

    string get_string_part(string str) {
      string neuer_string = "";
      int start1 = 0;
      int start2 = 0;
      bool start = false;
      for(int i=0;i<str.length();i++) {
        if ((str[i] == 'P' && start == false) { 
        start1 = i;
        }  
        else if ((str[i] == 'J') && start == false) { 
        start2 = i
        }  
        else if (str[i] == '-')  { 
        start=false;
        }  
        else if ((string1+1)==string2){
        start=true;
        }
    
        if (start) {
        neuer_string.append(str[i])
        }
      }
      return neuer_string;
    }
    

    So müsste es jetzt von der Logik her richtig sein.
    Lass halt man ein Teststring drüberlaufen...



  • else if ((string1+1)==string2){
        start=true;
        }
    

    argh, immer noch nicht.
    Hier musst nur if statt else if.
    Und dann noch

    if (start && (string2 !=i)) {
        neuer_string.append(str[i])
        }
    

    Sonst wird das J mitgeschrieben



  • hmm leider funktioniert es nicht, beim compilieren kommen mehrere fehler.

    z.b hier gibt mein compiler ein fehler raus.

    neuer_string.append(str[i])
    

    aber trotzdem danke.



  • #include <string>
    

    ??



  • das hatte ich schon eingefügt,trotzdem hat der ein problem mit dem "append"



  • schmoo2012 schrieb:

    das hatte ich schon eingefügt,trotzdem hat der ein problem mit dem "append"

    Irgendein beliebiges Problem? Oder sagst Du uns auch noch, welches Problem der Compiler meldet?



  • sorry,

    diese meldung kommt,

    [C++ Fehler] Unit1.cpp(37): E2285 Keine Übereinstimmung für 'string::append(char)' gefunden
    


  • Versuch mal

    neuer_string = neuer_string + str[i];
    

    statt dem append.



  • schmoo2012 schrieb:

    sorry,

    diese meldung kommt,

    [C++ Fehler] Unit1.cpp(37): E2285 Keine Übereinstimmung für 'string::append(char)' gefunden
    

    Verwende

    mystring.push_back(str[i]);
    

    antselle

    mystring.append(str[i])
    

    append ist nicht für ein char definiert.



  • Oder:

    neuer_string.append(string(str[i]))
    

    Aber das dürfte exakt das selbe sein 😉



  • temp schrieb:

    Oder:

    neuer_string.append(string(str[i]))
    

    Aber das dürfte exakt das selbe sein 😉

    Ist das selbe std:string besitzt auch keinen Konstruktor für char.



  • temp schrieb:

    Versuch mal

    neuer_string = neuer_string + str[i];
    

    statt dem append.

    Aber das geht. Hab ich so im Einsatz.
    Ist die eleganteste Lösung finde ich.



  • temp schrieb:

    Ist die eleganteste Lösung finde ich.

    Nach der Lösung mit operator+= könnte man drüber diskutieren. push_back() ist meines Erachtens trotzdem einheitlicher.



  • okay,erstma danke,

    könnte mir jemand von euch den kompletten quellcode mal aufschreiben?
    also wenn ich das aus einer datei namens "zone.inf" einlesen will und der das z.b als als output in einer "output.txt" speichert.

    das hier hatte ich schonmal geschrieben, aber das Programm gibt mir ja nur den Kompletten text aus und nicht ab "PJ" bis "-" und der zähler zählt nur die reihen und nicht die buchstaben

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    using namespace std;
    
    int main ()
    {
    
      char buffer[800];
      int zaehler = 0;
      string line;
      ofstream a_file ("output.txt");
      ifstream myfile ("zone.inf");
      if (myfile.is_open())
    
      {
        while (!myfile.eof() )
        {
    
          getline (myfile,line);
          cout<<line<<"\n"<<endl;
          a_file<<"\n"<<line;
          zaehler++;
    
        }
        myfile.close();
        cout<<"Z"<<char(132)<<"hler: "<<zaehler<<"\n";
    
      }
    
      else cout << "Unable to open file";
    
      system("Pause");
      return 0;
    }
    


  • An der Stelle

    cout<<line<<"\n"<<endl;
    

    die Funktion mit line aufrufen.

    string new_line= get_part_string(line, &zaehler);
    cout<<new_line<<"\n"<<endl;
    a_file<<"\n"<<new_line;
    

    Zähler musst dann halt noch in die Funtion rein.



  • schmoo2012 schrieb:

    okay,erstma danke,

    Bitte. Macht aber nicht gerade den Eindruck, als hättest du die Beiträge genau gelesen...

    schmoo2012 schrieb:

    könnte mir jemand von euch den kompletten quellcode mal aufschreiben?

    Ähm... Nein. Wir haben dir eigentlich genügend Tipps gegeben. Vor allem mit den STL-Funktionen sollte die Sache kein Problem sein. Auf www.cplusplus.com findest du deren Dokumentation, möglicherweise lohnt sich ein Anschauen...

    Dein Code beinhaltet im Weiteren einige Fehler:

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>   // alle 3 Header sind falsch, vor allem dieser hier
    // richtig wären <iostream>, <fstream>, <string>
    using namespace std;
    
    int main ()
    {
    
      char buffer[800];    // Wieso Variablen anlegen, die man nie braucht?
      int zaehler = 0;
      string line;         // Da frage ich mich sowieso, woher string bekannt sein soll...
      // ...
    }
    

Anmelden zum Antworten