Einen String Bei Tab zerlegen und in Einzelstrings ablegen
-
hi,
weis nicht wer von euch mit SPS zu tun hat, es gibt .seq
files in denen die bezeichner, operatoren und kommentare gepeichert sind:Bezeichner Openand Kommentar E1.0 Brenner_ein Ölbrenner in Betrieb E1.1 ..... .... ..... ..... .... M121.3 M121.3 PB110NW4
da ich nun gezwungen bin diese symbolik datei zu aktualisieren und zu
faul bin alles zu tippen, habe ich eine software geschrieben in der ich
eingescannte pläne mit den daten automatisch nachtragen kann.Das eigentliche problem besteht darin die in den , aus der datei ausgelesenen
zeilen enthaltenen daten in drei einzelne Strings zu zerlegen... diese daten
sind durch einen tabulator getrennt... jemand ne idee?thx
-
Ich würd da jetzt spontan zu sagen: Binär einlesen, jede Zeile in einem std::string speichern, in diesem string solange mit find_first_of in dem String nach \t suchen, den Teil bis dahin rauschneiden und in dem resultstring1 speichern (eventuell in einem Zwei-Dimensionalem-Vektor. Erste Dimension für Anzahl der Zeilen, zweite für Anzahl der teil-Strings), bis es kein Tab-Stopp mehr gibt.
Hoffe das war verständlich
Caipi
-
hmm ich werds mal so testen^^ ich realisiere das eigentliche programm im bcb und lade die zeilen in eine listboxum evnt. nacher noch korrekturen (in 2 edit boxen) vor zu nehmen.(hätte also die zeilen sowieso schon in form eines strings vorliegen)
Gibt es nicht eine möglichkeit DIESE strings auf ähnliche weise zu verarbeiten?
sry aber das ist mir momentan noch etwas unverständlich... es muss erst
machen!
-
Kleines Beispiel: (Unschön aber es soll ja nur eine Anregung sein, wie ich es meine ;))
#include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { string src("Dast ist\tein String\tmit Tab\tstopps"), tmp; vector<string> string_parts; int tab_pos; do { tab_pos = src.find_first_of('\t'); if(tab_pos != string::npos) { tmp.assign(src, 0, tab_pos); src.erase(0, tab_pos + 1); string_parts.push_back(tmp); } } while(tab_pos != string::npos); for(unsigned int i = 0; i < string_parts.size(); ++i) cout << "vector<string>[i]: _" << string_parts[i] << "_\n"; return 0; }
Caipi
-
char string[] ="E1.0\tBrenner_ein\t\x99lbrenner in Betrieb"; char Bezeichner[256], Openand[256], Kommentar[256]; sscanf (string,"%s %s %s",Bezeichner,Openand,Kommentar); printf ("%s\n%s\n%s\n",Bezeichner,Openand,Kommentar);
Ähm ja ist C, aber vlt. hilft es dir ja trotzdem
-
Mir ist ein kleiner Fehler unterlaufen, da in deiner Datei ja Leerzeichen vorkommen können muss es so sein:
char string[] ="E1.0\tBrenner_ein\t\x99lbrenner in Betrieb"; char Bezeichner[256], Openand[256], Kommentar[256]; sscanf (string,"%[^\t]\t%[^\t]\t%[^\0]",Bezeichner,Openand,Kommentar); printf ("%s\n%s\n%s\n",Bezeichner,Openand,Kommentar);
Gruß
-
Joa....... goil.. gena das habsch gesucht... pefekt thx!
-
Oh man. Ich denke mal wieder viel zu kompliziert
Du kannst natürlich auch (Wenn's C++ sein soll) pro Zeile dreimalgetline(in, str, '\t'); // Wenn in ein input-file-stream und str ein std::string
schreiben.
Caipi
-
ach mist , joa klar bei getline gabs ja auch nen delimiter thx ist die sauberere lösung...