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," PJ")
if k=0 GOTO 1000for j=k+5 to x
a(x=b
i = i+1
if asc(a$)=1 goto 200
next200 c(b
print "Die Projektnummer hat "+STR=c$
if MID,i-1,1)="-" then
d(c+" auf: "+d+" ge„ndert" PN=d$
END IF
close #1AUSGABEDAT$ = PN$+".HNC"
open "o",#2,AUSGABEDAT$
print #2, "%"
close #2print "----------------------------------------------------------"
input "Dateien verknuepfen von";n1
input " bis";n2for i=n1 to n2
if i<10 then
i(STR$(i),1)
end ifif i>=10 and i<100 then
i(STR$(i),2)
end ifif i>=100 and i<1000 then
i(STR$(i),3)
end ifif i>=1000 then
goto 1002
end ifQUELLDAT$ = c+".HNC"
print QUELLDAT$
open "i",#3,QUELLDAT$
open AUSGABEDAT$ for append as #2while not eof(3)
input #3,NCSATZ$if NCSATZ="%" then print #2, "( Anfang Programm "+QUELLDAT+" )"
GOTO 500
end ifif RIGHT,3)="M02" AND i=n2 then
print #2,NCSATZ$
print #2, "( Ende Programm "+QUELLDAT$+" )"
GOTO 500
end ifif RIGHT,3)="M02" then
print #2, "( Ende Programm "+QUELLDAT$+" )"
GOTO 500
end ifif NCSATZ$="E" GOTO 500
print #2,NCSATZ$
500
wend
close #3
close #2next
open AUSGABEDAT$ for append as #2
print #2, "E"
close #2999 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 999Danke
-
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 nochif (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... // ... }