CString finden und danach erst rausschreiben
-
Schau in die FAQ.
Dort findest du wie du fileopen,read,closeNun haben wir die Zeile eines Files in einem CString
Mit der Member "find" der Klasse CString sucht man den CString ab und bekommt die Position des gesuchten.
Danach mit Mid,Left oder Right den CString teilen und schon hat man das was man braucht.
-
Hi ...
Ich nochmal.
Der Schreibfehler #definde .....
muss geändert werden zu #define .....
Also:.... #define kommt_auf_die_groesse_der_Datei_an 100000 ....
Ebenfalls muss noch die Datei,
die geöffnet wurde, geschlossen werden mit Close().
Also:..... charinhalt[lesefile.Read(charinhalt,sizeof(charinhalt))]='\0'; strfindestring=charinhalt; lesefile.Close(); UpdateData(FALSE); .....
bis denne
wnw
-
danke erstmal
so wie ich das sehe findest du in deinem code "Frames: " was ja auch richtig ist
aber ich kann nicht ersehen wie du die 6 Zeichen nach Frames findest, den ndu gibst ja 0,6 das wäre in diesem Falle Frames. aber ich brächte eigentlich 9,14
nur die Zahl die nach Frames steht ist ja variable deshalb weiss ich nciht wie ich dem sagen soll dsa der string eigentlich 14 zeichen lang ist.
p.s.: in der faq habe ich gesucht aber nichts dergleichen gefunden
-
Hi ...
@Zakon
Die Variable strframes hat die gesuchten Zeichen (Zahlen).
Ich erkläre mal was im Quelltext passiert./* Hier wird die Datei ausgelesen und an charinhalt übergeben und ein Endezeichen dran gehängt */ charinhalt[lesefile.Read(charinhalt,sizeof(charinhalt))]='\0'; /* jetzt wird der Inhalt (charinhalt) der Datei an strfindestring übergeben und strfindestring mit UpdateData(FALSE) aktualisiert. Die geöffnete Datei wird geschlossen.*/ strfindestring=charinhalt; lesefile.Close(); UpdateData(FALSE); /* Jetzt wird geprüft ob strframes (Frames:) enthalten ist, wenn enthalten dann folgenden Code ausführen*/ if (strfindestring.Find(strframes) != -1) { /* Hier wird alles was vor dem gefundenen Frames: gefunden wurde gelöscht, einschlieslich dem String Frames:,deshalb nämlich strframes.GetLength() . Mit UpdateData(FALSE); wird wieder der CString aktualisiert.*/ strfindestring.Delete(0,strfindestring.Find(strframes)+strframes.GetLength()); UpdateData(FALSE); /* Jetzt werden die nächsten 6 Zeichen (eigentlich die Zeichen die hinter Frames: stehen, Frames: wurde aber schon mit Delete() entfernt) übernommen */ strframes=strfindestring.Left(0,6); UpdateData(FALSE); /* Jetzt hat strframes die Zahlen die Du brauchst */
bis denne
wnw
-
ah danke dann habe ich das delete falsch interpretiert
vielen vielen dank
werd jetzt mal testen gehen
-
hmm es kommt die fehlermeldung
error C2660: 'Left' : Funktion akzeptiert keine 2 Parameterdas ist das, wo du sagst 0,6
-
Hi ...
Setze beide
strings noch in Klammern dann sollte es funktionieren.
Also:strfindestring.Delete(0,(strfindestring.Find(strframes)+strframes.GetLength()));
bis denne
wnw
-
Hi ...
@Zakon
Ein Posting vorher bitte herausnehmen.
Da hatte ich mich verschrieben.Bitte die 0 und das Kommata aus .Left(0,6); herausnehmen.
Da hatte ich mich ebenfalls verschrieben.
´tschuldige bitte.
Also:strfindestring.Left(6);
bis denne
wnw
-
jo habe ich nachgelesen und es herausgefunden.
danke
bin jetzt erst mal weiterlernen, wenn ich dann noch fragen habe heute abend, werde ich sie nat. posten
-
so nun ein weiteres Problem
if (lesefile.Open("name.txt",CFile::modeRead,NULL) == NULL) { MessageBox("Datei nicht vorhanden","file not found",MB_OK); } else charinhalt[lesefile.Read(charinhalt,sizeof(charinhalt))]='\0';
er geht immer in die if shcleife rein. ich habs erst versucht mit GetFileName(); da der name der datei sich immer ändert. dann habe ich mal den richtigen dateinamen und auch mit dem kompletten Pfad. aber hat alles nichts gebracht der geht immer gleich rein.
weiss da jmd rat
-
Datei vorhanden???
-
if (!lesefile.Open("name.txt",CFile::modeRead,NULL)) { // Error open file } else { // Open file OK }
[ Dieser Beitrag wurde am 05.01.2003 um 18:18 Uhr von Unix-Tom editiert. ]
-
das komische ist wenn cih den kompletten path angebe dann gehts
habs aber so CString name = Datei.GetFileName() oder GetFilePath()
und dann !lesefile.open(name,....)
geht aber net
-
Schon mal einen LPCTSTR an open übergeben.
-
Nein
-
find ich net dass jmd für mich antwortet, wieso zur hölle kann ich mich net anmelden.
aber die antwortet lautet wirklich nein
-
Na dann mach dies
BOOL Fileklasse::Open(LPCSTR szFile, CFileException *feError) { CFileStatus rStatus; // if(!m_fFile.Open(szFile, CFile::modeRead| CFile::shareDenyWrite,feError)) if(!m_fFile.Open(szFile, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::shareDenyWrite ,feError)) return FALSE; m_fFile.GetStatus(rStatus); m_nMaxSize = rStatus.m_size; return TRUE; //CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite }
Hier mal ein Code aus meiner persönlichen dll
-
damit komme ich nicht so richtig klar
aber ich hab mal folgendes gemachtMessageBox(name);
dann gibt der mir entweder den Dateiname.txt aus oder den
C:\dir1\dateiname.txt aus, je nachdem welche fkt ich verwendeaber Open("c:\\dir1\\dateiname.txt") verlangt ja sowas.
gibts da ne möglichkeit, das so hinzubiegen
-
naja so wie ich eben nachgelesenhabe war das blödsinn was ich erzählt habe.
aber editieren geht ja net da ich mich net anmelden kann aus welchen gründen auch immer