Wort aus einer Datei durch ein anderes ersetzen wie?

Hallo Leute sorry wegen doppelpost. Aber ich hätte mal noch ne Frage zum Thema (Anfangsthema).
Ich habe versucht den code so umzubauen das man kein Wort mehr suchen muss, sondern das das such_wort immer definiert ist. Also man gibt nur ein durch was man ersetzen will. Hier mein Versuch. Nur leider geht es nicht. Könnt ihr mir helfen?

Das hier habe ich durch

Code:
int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
        such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
        *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

das ersetzt.
Code:
}
int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1];
   char neu_string[STRING_MAX+1];
   char such_wort[STRING_MAX+1]="hello";
   char replace_wort[STRING_MAX+1];
   char *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

Irgendwie versteh ich nicht wieso das so nicht geht.

mfg
 
Na das genügt auch noch nicht.
Du legst zwar am Anfang fest, dass das such_wort "hello" ist, aber überschreibst dann unten den Inhalt vom such_wort mit dem fgets-Befehl. Du solltest also noch folgendes auskommentieren (im Orginal ab Zeile 54):
Code:
   printf("Welches Wort wollen Sie ersetzen : ");
   fgets(such_wort, STRING_MAX, stdin );
   chomp(such_wort);
 
komisch habs nun das chomp(such_wort); auch noch rausgenommen hatte ich vergessen, geht aber immer noch nicht. Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?

thx für die Hilfe bissher super Board hier.

mfg
 
Zuletzt bearbeitet:
aditmine hat gesagt.:
Ist das was du da gepostet hast dein ganzes c porg. ? Also erstmal hast du verschiedenste Variablen nicht deklariert. sonltest du ev. noch nachholen. sonst ev. mal ganzen code posten.

mfg

ps: Also mich als angehenden Entwickler störte an deinem Code auch noch, dass der viel zu lang ist. Du hast sehr vieles das man kürzen könnte. Und vieles ist sehr unübersichtlich.Würde ich dir Empfelen zu ändern, denn dadurch hast du dann auch den besseren Überblick, und vergisst nicht mehr Variablen zu deklarieren und solche Sachen. Nur ein Vorschlag. ;-)
Hallo
Das wusste ich das der Code zu lang ist. Doch ich fragte warum es nicht tut wenn ich ein wort überschreiben will?
 
Zuletzt bearbeitet:
aditmine hat gesagt.:
komisch habs nun das chomp(such_wort); auch noch rausgenommen hatte ich vergessen, geht aber immer noch nicht. Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?

thx für die Hilfe bissher super Board hier.

mfg

weiss einer RAT?
wär cool denn ich komm nimmer weiter das will einfach nit.
 
Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?
Ja dann sollte es gehen. Du musst nur oben das Wort such_wort definieren und unten die drei Zeilen (printf, fgets, chomp) zum Auslesen auskommentieren.
 
? habs nun genau so gemacht. Geht aber nicht. :(

hier nochmals den ganzen code ... Also ich seh nix mehr was dazu beitragen könnte das es nicht geht. Seht ihr noch irgendwas?
Code:
/* search_and_replace.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STRING_MAX 8192

int wort_begrenzer(char c) {
   return ( c == '\n' || c == '\t' || c == '\0' ||
       c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
 size_t p=strlen(str);
 str[p-1] = '\0';
}

int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1];
   char neu_string[STRING_MAX+1];
   char such_wort[STRING_MAX+1]="ABCPC000";
   char replace_wort[STRING_MAX+1];
   char *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

   if(argc < 2) {
      fprintf(stderr, "Verwendung: %s datei\n", *argv);
      return EXIT_FAILURE;
   }
   file = fopen(argv[1],"r");    /* Datei zum Lesen öffnen     */
   copy = fopen(argv[1],"r+");   /* Datei zum Schreiben öffnen */
   if(file == NULL || copy == NULL) {
      printf("Fehler bei fopen()...\n");
      return EXIT_FAILURE;
   }
   alt_string[0]='\0';
   /* Kompletten String in alt_string legen ...  */
   /* Bitte ggf. selbst durch dynamische Speicherverwaltung
     * genügend Platz schaffen! */
   while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
      len += strlen(puffer)+1;
      if(len < STRING_MAX)
         strcat(alt_string, puffer);
      else {
         printf("Puffergroesse ueberschritten!\n");
         break;
      }
   }
   neu_string[0]='\0';


   such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
   for(w = 0; w < such_wortlen; w++)
   /* Nach Wortbegrenzern duchlaufen ... */
   if(wort_begrenzer(such_wort[w])) {
      printf("Keine Wortbegrenzer im Suchwort\n");
      return EXIT_FAILURE;
   }
   printf("Geben Sie Bitte den PC Namen ein : ");
   fgets(replace_wort, STRING_MAX, stdin);
   chomp(replace_wort);
   i = 0;
   while(1){
      if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
         /* Kein Wort zu ersetzen */
         strcat(neu_string, &alt_string[i]);
         break;
      }
      else { /*..ansonsten von Byte i bis zgr in neu_string*/
         strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
         /* Jetzt überprüfen, ob wir ein Wort haben und
          * keinen Teilstring oder das Wort am Anfang steht */
         if( (zgr-&alt_string[0]==0 ||
              wort_begrenzer( *(zgr-1))) &&
              wort_begrenzer( *(zgr+such_wortlen))) {
            strcat(neu_string, replace_wort);
            /* Nach ersetztem Wort den Zeiger setzen ... */
            i += zgr + such_wortlen-&alt_string[i];
         }
         else {
            strncat(neu_string, zgr, 1);
            i += zgr + 1-&alt_string[i];
         }
      }
   } /* Ende while(1) */
   /* Für Testausgabe ... */
   /* printf("Neuer String : %s\n",neu_string); */
   strcpy(alt_string, neu_string);
   /* Achtung jetzt wirds ernst,
    * für Testausgabe in Kommentar setzen*/
   fputs(alt_string, copy);
   neu_string[0] = '\0';
   return EXIT_SUCCESS;
}

thx für die hilfe bisher

bis denne
 
Also ich habe mir den Source nochmal gegeben. Fehler kann ich jetzt ad hoc erstmal keine sehen, außer, daß du argv[1] statt argv[2] verwendet hast. Aber das ändert nichts daran, daß er nicht die Datei einliest. Idee habe ich jetzt erstmal auch keine.
 
Hi.
Also ich habe mir den Source nochmal gegeben. Fehler kann ich jetzt ad hoc erstmal keine sehen, außer, daß du argv[1] statt argv[2] verwendet hast. Aber das ändert nichts daran, daß er nicht die Datei einliest. Idee habe ich jetzt erstmal auch keine.
argv[2] wäre ja auch falsch wenn bloss sichergestellt wird das argc mind. 2 ist.

@aditmine: Es wäre ja ganz hilfreich wenn du sagst was nicht funktioniert und wie du das Programm aufgerufen hast und was dann dabei herausgekommen (Fehlermeldungen?) ist.

Gruß
 
Also wenn ich den code ganz normal benutze, so wie am anfang dann gehts. Wenn ich aber die Variable "such_wort" oben definiere, und die 3 Zeilen unten wegnehme, dann gehts nimmer. es kommt kein Fehler. Es wird einfach das Wort nicht überschrieben. :(

mfg
 

Neue Beiträge

Zurück