Hallo, Ich versuche seit längeren in C Sprache ein Programm zu schreiben, was beim starten einen Dateipfad abfragt. In meinen Fall trage ich einen Pfad von einem Textdokument ein, was geöffnet werden soll. Im Anschluss soll dieses Programm eine Abfrage machen nach welchen wort gesucht werden soll in dem Textdokument. Danach noch eine Abfrage wodurch es ersetzt werden soll. Das Programm soll dann selbstständig alle gesuchten wörter ersetzen mit dem neuen Wort. Beispiel Textdokument: Inhalt Hallo World, Hallo World, Hallo World Programm soll "World" suchen und ersetzen mit "Welt".... Neuer Textdokument Inhalt Hallo Welt, Hallo Welt, Hallo Welt Hat jemand eine Idee für einen möglichen Code? Bis jetzt funktioniert nur das öffnen der Datei...
Wieder mal eine Hausaufgabe und dabei hat das Sommersemester gerade erst angefangen... "Hat jemand eine Idee für einen möglichen Code?" So lernst Du doch nichts.
Schreib doch erstmal auf was Du hast (code tags beachten) und frage dann konkret nach einzelnen Schritten, nachdem Du Deine Vorlesungsunterlagen, Anfängerbuch, Tutor oder Google konsultiert hast.
Beitrag #4970681 wurde von einem Moderator gelöscht.
das mein letzter Code Versuch. #include <stdio.h> #include <stdlib.h> int main () { char pfad [200]; char text [100]; char change [100]; //printf("Geben sie Textdatei Pfad ein...!\n"); //fgets(pfad,200,stdin); //printf("Was soll gesucht werden?\n"); //fgets(text,100,stdin); //printf("Womit soll ersetzt werden?\n"); //fgets(change,100,stdin); FILE *datei; datei = fopen (pfad,"r+"); if (datei == NULL) { printf("Fehler beim öffnen\n"); return 1; } fprintf (datei,"s\n" ); fclose (datei); return 0; } Da obend ist etwas auskommentiert was erstmal unwichtig ist. Das sollen die Späteren Abfragen sein, wenn das Programm startet.Hier habe ich erstmal direekt ein Pfad im Programm eingegeben. Hier wollte ich sehen, ob er die Datei öffnet und habe mir einfach die ganze datei ausgeben lassen.Das funktioniert alles soweit. Ich weiß nur nicht wie ich die gesuchte Variable und die ersetzung Variable verarbeiten muss. Nach langer recherche habe ich diese Funktion gefunde. void Replace(char *pStr, char replace, char newChar) { do { if(*pStr == replace) *pStr = newChar; } while(*pStr++); } unsigned int Replace2(char *pStr, char replace, char newChar) { unsigned int cnt=0; do { if(*pStr == replace) { *pStr = newChar; cnt++; } } while(*pStr++); return(cnt); } void main() { char text[120] = "eingelesene,Zeile"; unsigned int ret; Replace (text, ',', '.'); ret = Replace2(text, ',', '.'); } Kann man die umschreiben damit es am Ende läuft oder ist das der falsche Lösungansatz? Muss dazu ergänzen, das dies ein Labor ist von der Schule und wie haben C nur die groben Grundlagen gehabt.
Der von dir gefundene Code ersetzt nur einzelne Zeichen durch ein Neues. Prinzipiell geht es mit ganzen Strings aber so ähnlich. Die strstr() Funktion könnte noch Hilfreich sein um überhaupt erstmal das Vorkommen eines Strings zu finden. Ersetzen muss man dann allerdings noch selbst.
Ist es den möglich das er die Textdatei durchläuft am mit einer Schleife und alle Wörter ersetzt? unsigned int Replace2(char *pStr, char replace, char newChar) was wäre den pSTR , replace , newChar? newChar = ersetzendes Wort replace = zu ersetzendes Wort pSTR = ? Vielen Dank schon einmal für die Mühe
Arbeite mit einer Quell- und einer Zieldatei. Das erstzeten in Place geht nur, wenn Such- und Ersatzstring gleich lang sind. Das ist aber immer noch nicht trivial, da du auf die Dateizeiger (Positionszeiger) achten musst. fgets legt das abschließende '\n' von der Entertaste mit im String ab.
Das heißt ich lese die test.txt (quelldatei) aus und kann das irgendwie in die 2te test.txt (Zieldatei) schreiben lassen mit den Änderungen? wie ich es zur Zeit vor hatte, ist es nicht möglich?
Du könntest an einer Reihe von Punkten ansetzen um Deine Kenntnisse zu erweitern. Zum ersten betrifft das Datentypen: Es gib eine Reihe, von denen Du bisher vielleicht schon gehört hast: z.B. int, char und double. Ein Sonderfall sind die Vektoren von char - und das ist hier für Dich zuerst wichtig. Ein char wie in [c] char a; [(c] ist der Typ für ein einzelnes Zeichen - nicht aber für eine Kette von Zeichen. In der Variable a kann nur ein einzelnes Zeichen gespeichert werden. Falls Du Ketten von Zeichen speichern willst, benötigst Du einen Vektor von Zeichen, viel häufiger "String" genannt. Dazu lies bitte mal: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/011_c_arrays_011.htm#mja452663858fd23e86c51cfa3b9139f64 Wenn Du das gelesen hast, versuche einmal Deine eigenen Fragen von hier Beitrag "Re: C Programmierung" zu beantworten. Die Antwort muss nicht perfekt sein, aber es muss erkennbar sein, dass Du irgendwas daraus gemacht hast, was halbwegs in die richtige Richtung geht.
Die 2. Datei muss einen anderen Namen bekommen Z.B. test.txt.tmp (es gibt auch C-Standardfunktionen, die dir einen eindeutigen Namen liefern) Danach musst du das Original löschen und die temporäre Datei umbennen. So zerstörst du im Fehlerfall auch nicht das Original. Daniel H. schrieb: > wie ich es zur Zeit vor hatte, ist es nicht möglich? Bei deinem Beispiel Hallo World, Hallo World, Hallo World käme dann Hallo Weltd, Hallo Weltd, Hallo Weltd heraus Wenn du World durch Universum erstzt, gibt das Hallo Universumllo Universumllo Universum Also eher nicht.
Theor schrieb: > Dazu lies bitte mal: > http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/011_c_arrays_011.htm#mja452663858fd23e86c51cfa3b9139f64 Bitte nicht. Die Onlineversion ist noch die 1. Auflage und voller Fehler. Zudem hat der Autor einen nicht so guten Ruf.
Habe ich mir durchgelesen. Diese Grundlagen habe ich schon verstanden. Mein Problem liegt das ich nicht weiß, welche Befehle wichtig für mich sind um nach Wörter zu suchen und diese dann zu ersetzen :( Ich vermute mal stark du wolltest mir damit sagen, dass es zu ein Bufferoverflow kommen kann ,wenn ich das original Wort ersetze durch ein längeres.
Daniel H. schrieb: > Habe ich mir durchgelesen. Diese Grundlagen habe ich schon verstanden. Ich fürchte Du irrst Dich. Falls Du es verstanden hättest, würdest Du sehr wahrscheinlich so etwas: > was wäre den pSTR , replace , newChar? > newChar = ersetzendes Wort > replace = zu ersetzendes Wort nicht fragen. Denn es würde klar sein, das char nur für ein einzelnes Zeichen steht und ergo, der Parameter newChar kein "Wort" enthalten kann. > Mein Problem liegt das ich nicht weiß, welche Befehle wichtig für mich > sind um nach Wörter zu suchen und diese dann zu ersetzen :( Das ist in gewisser Weise ein zwar verständlicher aber doch behebbarer Irrtum. Befehle in C sind if, then, else, do, while, switch etc. ebenso wie die große Klasse der Ausdrücke. Insofern ist die Frage danach, welchen Befehl Du anwenden musst, um Wörter zu ersetzen falsch gestellt, denn die Wirkung dieser Befehle ist so trivial, so weit vom beabsichtigten Effekt entfernt, dass sie sinnlos wird. Es ist mehr oder weniger wahrscheinlich, dass einer dieser Befehle bei der Lösung verwendet werden kann und muss, aber ein Befehl allein wird das Problem nicht lösen. Das sind einfach Anweisungen um den Kontrollfluss zu beeinflussen. Was mir zu fehlen scheint, ist die Kenntnis, dass zuallererst ein Algorithmus, ein Verfahren gesucht wird. Danach und erst dann, ein Code, der dieses Verfahren in Form von Anweisungen realisiert. Diese Behauptung zielt nicht einfach nur auf die richtige Anwendung der Begrifflichkeiten ab. Vielmehr auf die Grundidee der Programmierung. Und das wäre der erste wesentliche Schritt, der die Frage nach "einem Befehl" der "Wörter austauscht" als sinnlos erkennbar machen würde. > Ich vermute mal stark du wolltest mir damit sagen, dass es zu ein > Bufferoverflow kommen kann ,wenn ich das original Wort ersetze durch ein > längeres. Nein. Ich wollte das sagen, was ich geschrieben habe. Es ging um die Eigenschaften von Datentypen. Falls Du weiter darauf besteht, konkrete Lösungen für die Programmieraufgabe zu erhalten: Die werde ich nicht liefern. Ich werde Dir nur helfen, Dir selbst zu helfen und die richtigen Fragen zu stellen und an den richtigen Stellen nach den Lösungen zu suchen.
Dirk B. schrieb: > http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/011_c_arrays_011.htm#mja452663858fd23e86c51cfa3b9139f64 > > Bitte nicht. > Die Onlineversion ist noch die 1. Auflage und voller Fehler. > Zudem hat der Autor einen nicht so guten Ruf. Kannst Du mir ein paar Fehler zeigen? Ich habe große Teile davon durchgelesen und fand es gut lesbar, bin aber selber nur ganz am Anfang.
Peter M. schrieb: > Kannst Du mir ein paar Fehler zeigen? Lies dir die schlechten Bewertungen auf Amazon durch. Oder https://www.c-plusplus.net/forum/272350 Peter M. schrieb: > Ich habe große Teile davon durchgelesen und fand es gut lesbar, bin aber > selber nur ganz am Anfang. Das es gut lesbar ist, heißt ja nicht, dass es richtig ist. Und gerade Anfänger können die Fehler nicht erkennen. Sie wissen also nicht, das sie etwas verkehrtes lernen. Das ist ja das Dilemma.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.