.h Datei öffnen, alle Leerzeichen entfernen, alle Zeilen zählen, ...
-
Hallo zusammen,
ich soll aus einer .h-Datei alle Leerzeichen und TAB entfernen, die jeweilige Länge einer Zeile zählen die Anzahl der Zeilen zählen und jede Zeile in einen Vector schreiben.
Ich habe es bereits geschafft die Datei zu öffnen und kann die .h-Datei unter "Formatierte Eeprom_config.txt" speichern.
int main() { ifstream Eeprom_Dat; // neuen Lese-Stream erzeugen Eeprom_Dat.open("eeprom_config.h", ios_base::in); // eeprom_config.h öffnen if (!Eeprom_Dat) // Fehler beim Öffnen? cerr << "Eingabe-Datei kann nicht geöffnet werden\n"; else { // falls es geklappt hat ... ofstream Eeprom_Conf("Formatierte Eeprom_config.txt"); if (!Eeprom_Conf) // Fehler beim Öffnen? cerr << "Ausgabe-Datei kann nicht geöffnet werden\n"; else { char c; // und jetzt, jedes Zeichen ... while (Eeprom_Dat.get(c)) { // ... einzeln ... Eeprom_Conf.put(c); // ... in die Zieldatei schreiben. } } } return 0; }ich habe es noch nicht geschafft alle Leerzeichen und TAB zu entfernen. Als pseudocode: Wenn aktuelles ASCII-Zeichen kein "Leerzeichen" oder "TAB" dann in neuer Datei speichern, ansonsten nichts unternehmen.
alle Zeilen zählen: Die letzte Zeile ist immer #endif, also als Pseudocode, zähle alle Zeilen bis #endif erreicht ist.
Und noch die Länge einer Zeile, zähle alle Zeichen bis aktuelles ASCII-Zeichen == "Eingabetaste"
Wenn ich nun x-Zeilen habe und von jeder Zeile weiß wie Lang sie ist, könnt ich doch x-Vectoren erzeugen und jeder Vector mit der Länge der jeweiligen Zeile.
Bin über jeden Vorschlag bankbar. Bin auch für andere (schnellere) Ideen offen.
Vielen Dank
-
Was soll das werden? Das schreit nach jeder anderen Sprache aber nicht C++! Guck dir mal awk, sed, meinetwegen auch Perl oder Python an.
Ansonsten: Benutz doch einfach formatiertes Einlesen (Operator>>). Dies ignoriert ohnehin Whitespace (ich nehme jetzt einfach mal frech an, dass jeglicher Whitespace entfernt werden soll). Erst lieste die Zeile ein (getline), packst sie in einen Stringstream und liest diesen nochmals formatiert (in einen String) aus. Die gelesenen Strings hängst du anneinander und speicherst sie dann wie gewünscht ab. Fünfzeiler. Fertig.
-
ja leider ist die Vorgabe, dass es in C++ geschrieben werden muss. Es geht darum, dass ich aus einem Eeprom eine .h auslese und alle wichtigen Parameter schön sortiere. hier ein Beispiel: (etwa 1700 Zeilen)
//#define BENUTZERSPRACHE 60,B_EEPROM_ENUM/*M_BAR,FEED_PSI,#JUSTIERUNG#SPRACHE*/ //******************************************************************** #define PWM1_MIN 8,B_EEPROM_2BYTE_U/*1,mA,#PWM#ESX#STROM*/ #define PWM1_MAX 10,B_EEPROM_2BYTE_U/*1,mA,#PWM#ESX#STROM*/dieser Code sollte etwa so aussehen
Adresse Bezeichnung Faktor Einheit 8 PWM1_MIN 1 mA 10 PWM1_MAX 1 mAnun wollte ich erst mal beginnen alles rauszuschmeißen, was nicht mit #define beginnt, dann alle Leerzeichen, dann alle "#define".
Leider bin ich kein Programmierer und kann nur C++ grundlagen.
-
Das kenne ich doch irgendwoher...
Richtig! Dein letzter Thread war genau die gleiche Frage. Da hast du doch schon sehr gute Antworten bekommen. Das entfernen von Tabs und Leerzeichen ist nur herumgedoktere ohne richtigen Plan wie du danach weiterverfahren willst. Mit den Antworten aus dem anderen Thread kannst du hingegen die eigentliche Aufgabenstellung ganz leicht lösen. Insbesondere die Antwort von drakon sollte dir weiterhelfen.
-
Wenn ich mich richtig erinnere hat Werner sogar eine komplett Lösung gepostet.