bestimmte einträge in einem char *array entfernen
-
ich habe leider ein mehr oder weniger großes problem...
und zwar habe ich bislang ein programm erzeugt, welches aus einem input-string (lange, lange txt-datei, die aus 2 zeilen besteht ,durch mehrere "|" getrennt ist und durchweg geschrieben ist) eine übersichtliche liste dieses inputs ausgibt und wie bereits gesagt durch das "|" eine neue Zeile ausgibt. Zu jeder Zeile wird dazu noch ein wert zugewiesen... (die Werte befinden sich durchgehend in der zweiten zeile)z.B. mein String sieht so aus (kurzfassung): 1.Zeile: "c_id|d_id|e_id|"...
2.Zeile: "7|4|1|"...
daraus ergibt sich folgende Ausgabe: c_id = 7
d_id = 4
e_id = 1
...
Diese Ausgabe funzt auch bisher, nun mein Problem: Im input-string befinden sich mehrere kommentare (z.B. #blafasel <- bla |...|...)
und diese kommentare stören. wie kann ich also lediglich die Kommentare zwischen den Pipes löschen. Ein Kommentar beginnt immer mit '#' und endet immer mit "<- bla". Aber wie kann ich ein Tool schreiben, welches in einem char-array genau den teil zwischen '#' und "<- bla" entfernt. Ich bin schon fast am verzweifeln... habe schon etliche möglichkeiten ausprobiert, aber nicht funzt ordnungsgemäss. Hoffe auf baldige Hilfe...
-
Mit strchr() den # suchen, dann mit strstr() das <- bla suchen und dann einfach mit strcpy() o. ä. alles was nach <- bla kommt auf die Stelle kopieren wo # gefunden wurde.
-
ja, so in etwa hatte ich es auch schon probiert, aber funzt das auch, wenn in dem input-string mehrere Kommentare drin sind?
muss ich da noch eine schleife benutzen um wirklich alle # und die dazugehörigen kommentare zu entfernen?
-
Ja.
-
danke erstmal für deine antwort, wollte das so testen, aber irgendwie bekomme ich das mit dem reststring nicht hin.
es sieht wie folgt aus:(auszug)char* del(char *such, char *test)
{
char *a = strchr(test, '#'); //test ist der input-string
char *b = strstr(test, such); //such ist der String "<- bla"/*nun habe ich die beiden positionen, aber wie kriege ich dann den rest-string an die position von der #???
es wäre nett wenn mir jemand mit einem Stück Quellcode antworten würde... Ich bedanke mich schon mal im voraus...
-
char* del(char *such, char *test) { char *a = strchr(test, '#'); //test ist der input-string char *b = strstr(test, such); //such ist der String "<- bla" if(a && b) //Überprüfung, ob die Teiltexte gefunden wurden { strcpy(a, b+strlen(such)); //Kopiert den Text nach dem Suchstring an die Stelle, an der # gefunden wurde } return(test); }
-
danke AJ,
hat alles geklappt... Echt cool
-
habe jetzt nur noch das problem, dass wenn z.B. aus irgendwelchen gründen das "<- bla" fehlt, dann wird der ganze input bis zum nächsten <- bla gelöscht... das darf auch nicht sein.
wenn das <- bla fehlt soll der kommentar nicht gelöscht werden (d.h. wenn zwei # ohne ein <- bla aufeinander folgen)
nur wenn die # durch ein abschließendes <- bla beendet wird, soll gelöscht werden.
Wie kann ich da ran gehen? ich habe schon versucht irgendwie mit einem stat als boolean zu arbeiten, aber das funzt auch nicht.
Hat irgendjemand irgendwelche ideen???
Danke
-
Ok, dann noch die kleine Erweiterung
char* del(char *such, char *test) { char *a = strchr(test, '#'); //test ist der input-string char *b = strstr(test, such); //such ist der String "<- bla" char *h = strchr(a+1, '#'); //nächsten # nach dem ersten suchen if(a && b) //Überprüfung, ob die Teiltexte gefunden wurden { //Wenn kein zweiter # gefunden wurde oder der zweite # erst nach dem Suchstring ist if(!h || b < h) { strcpy(a, b+strlen(such)); //Kopiert den Text nach dem Suchstring an die Stelle, an der # gefunden wurde } } return(test); }
-
ich danke dir vielmals... tut mir leid wegen dem zweiten thread zum selben thema, kommt nicht mehr vor... wollte nur eine möglichst schnelle lösung, sorry...
-
evil411 schrieb:
ich danke dir vielmals... tut mir leid wegen dem zweiten thread zum selben thema, kommt nicht mehr vor... wollte nur eine möglichst schnelle lösung, sorry...
Kein Problem. Gibt Schlimmeres