SYSMATRIX
Legend Legend
|
Bräuchte das Ganze fuer einen Freund, hab leider selbst wenig Zeit und meine Versuche von gestern haben mich nicht ausm gdb gelassen ... so plz help Kurzbeschreibung: Lesen Sie eine Textdatei ein, suchen Sie in dieser nach einem String, und Ersetzen Sie diesen durch einen anderen String. Abzugebende Dateien: searchreplace.c searchreplace Allgemeine Hinweise: * Schreiben Sie Ihr Programm möglichst allgemein und kommentieren Sie es gut. * Halten Sie die in der Vorlesung und Übung vorgegebenen Konventionen für Programmierstil und Kommentierung ein. Verwenden Sie, wenn nicht anders angegeben, nur die Standard-Bibliothek. Aufgabenbeschreibung: Erstellen Sie ein Programm, welches eine Textdatei einliest, und diese dann nach einem in der Kommandozeile angegebenen String durchsucht. Falls ein zweiter String in der Kommandozeile angegeben wurde, soll der gefundene String durch diesen ersetzt werden, so oft der Such-String in der Datei vorkommt. Ausgabedaten: Geben Sie die neue Datei - Originaldatei inkl. Änderung mit der Endung .new aus. Fehlerbehandlung: Falls die Datei oder der Suchtext nicht vorhanden ist soll eine Fehlermeldung ausgegeben werden... MTIA
Bearbeitet von atrox am 07.05.2003, 19:54 (solved)
|
atrox
in fairy dust... I trust!
|
darf man strings.h verwenden ?
|
d3cod3
Legend...
|
naja, net gern gesehen aber ja @sys. icq: wir haben schon was
|
atrox
in fairy dust... I trust!
|
die naive zeilenweise methode: lese solange neue zeile
suche suchstring mit strstr() in zeile -> matchposition
wurde kein match gefunden (matchposition<0) THEN
juhu keine arbeit: kopiere eingabezeile in ausgabedatei
ELSE
/* Suchstring [erster teil][match][zweiter teil] */
// erster teil:
kopiere zeichen 0 bis matchposition in ausgabedatei (strncpy())
// match wird durch replacestring ersetzt
kopiere replacestring in ausgabedatei
// zweiter teil
kopiere matchposition+strlen(suchstring) bis ende vom string in ausgabedatei
|
watchout
Legendundead
|
ich nehm mal stark an, es handelt sich um ne aufgabe für schule/studium (haha, wofür sonst - bei _der_ angabe...)
ich wehre mich strikt gegen das machen von schul-studien-aufgaben für andere - wo sollte der lerneffekt dabei sein? und sorry, nur weils diesmal ein admin is, der die frage stellt - auf einmal sind alle ganz ausgewechselt...
noch dazu isses primivst - wie atrox schon erfolgreich dargestellt hat - und wenn dein freund nichtmal diese aufgabe bewältigen kann - sorry, dann ghört er einfach nicht auf eine schule/uni wo soetwas verlangt wird.
|
SYSMATRIX
Legend Legend
|
ich nehm mal stark an, es handelt sich um ne aufgabe für schule/studium (haha, wofür sonst - bei _der_ angabe...)
ich wehre mich strikt gegen das machen von schul-studien-aufgaben für andere - wo sollte der lerneffekt dabei sein? und sorry, nur weils diesmal ein admin is, der die frage stellt - auf einmal sind alle ganz ausgewechselt...
noch dazu isses primivst - wie atrox schon erfolgreich dargestellt hat - und wenn dein freund nichtmal diese aufgabe bewältigen kann - sorry, dann ghört er einfach nicht auf eine schule/uni wo soetwas verlangt wird. der ist anderswo sicher begabter als du ... #include <stdlib.h> #define MAXLINE 1024 #include <string.h> int getline(FILE *fp,char s[], int lim);
int main(int argc, char *argv[]) { FILE *fpin; FILE *fpout; char line[MAXLINE]={0}; char newline[MAXLINE]={0}; char* firstpart; char* secondpart; char* match; char outfilename[255]={0}; int linelen=0; int found=0; char* matchpos; char* p; int index; if (argc != 4) printf("usage: searchreplace searchfile searchstring replacestring\n"); else exit(1); fpin=fopen(argv[1],"r"); if (fpin == NULL){ printf("error openening %s \n");} else { strcpy(outfilename,argv[1]); strcat(outfilename,".new"); fpout=fopen(outfilename, "w");
while(linelen=getline(fpin,line,MAXLINE) > 0) {
if((matchpos=strstr(line, argv[2]))== NULL) { fprintf(fpout,"%s", strcpy(newline,line)); } else { index=matchpos-line; memcpy(newline, line, index); memcpy(newline + index, argv[3], strlen(argv[3])); memcpy(newline + index+strlen(argv[3]), line + index+strlen(argv[3]), strlen(line)-index+strlen(argv[3])); fprintf(fpout,"%s", newline); } } }
return 0; }
int getline(FILE *fp,char s[], int lim) { int c, i; for(i=0;i<lim-1 && (c=getc(fp))!=EOF && c!= '\n';i++) s[i] = c; if(c == '\n') { s[i] = c; i++; } s[i]= '\0'; return i; }
Bearbeitet von SYSMATRIX am 07.05.2003, 07:21 (for readability)
|
watchout
Legendundead
|
|
d3cod3
Legend...
|
abundzu ist es hilfreich wenn einem jemand hilft wenn man 10000 sachen zu tun hat. i hab selber durch die aufgabenstellung da viel zeit vertan die ich anders nötiger gebraucht hätte. ich bin auch gegen alles machen aber wenn man einmal aushilft seh ich nix tragisches dran
|
watchout
Legendundead
|
ja, und morgen fragt einer ob ihm wer ein programm schreibne kann, dass "Hallo Welt" auf den Screen pinselt
|
d3cod3
Legend...
|
bei sowas verteh ich deine aufregung. aber bei nem konkreten problem dass nimmer in den basics rumgrundelt (sicher, manche sehen das auch noch als basics) denk ich kann man schon mal wen um hilfe fragen
|
watchout
Legendundead
|
bei sowas verteh ich deine aufregung. aber bei nem konkreten problem dass nimmer in den basics rumgrundelt (sicher, manche sehen das auch noch als basics) denk ich kann man schon mal wen um hilfe fragen bitte... eine REPLACE-Function zu schreiben ist höchstens dann aufwendig, wenn du dir gedanken über die performance machen musst, das steht aber in keinster weise in der angabe @sysmatrix: bitte, es haben _nicht_ alle menschen ne bildschirmauflösung von 3200x2400
|
SYSMATRIX
Legend Legend
|
bitte... eine REPLACE-Function zu schreiben ist höchstens dann aufwendig, wenn du dir gedanken über die performance machen musst, das steht aber in keinster weise in der angabe
@sysmatrix: bitte, es haben _nicht_ alle menschen ne bildschirmauflösung von 3200x2400 sry, edited.
|
Vivo
Dreamworker
|
Sry für den folgenden Offtopic beitrag aber das muss ich loswerden :
Ich habe noch nie verstanden wie man posten kann das man nicht bereit ist jmd bei einem Problem nicht zu helfen ? Wozu ? Wer hilfsbereit ist und willig das zu machen soll das tun, wenn jeder der Meinung ist, er sollte den Kram selber erledigen oder es ist lächerlich etwas derartiges zu poste, bekommt er eh keine Antwort. Also wozu immer diese Aufregerei ??
Und Lerneffekt hin oder her -> ich glaub das kann jeder selber Entscheiden. Und jede Fachrichtung liegt einfach nicht jedem gleich gut ...
|
FMFlash
tranceCoder
|
eine problemstellung posten ohne vorher daran gearbeitet zu haben, nicht weiter nachdenken und dann die lösung zu copy / pasten ist wohl nicht der rechte weg, aber ein sehr guter lerneffekt wird imho dann erzielt wenn sich jemand mit einem problem bereits intensiv beschäftigt hat, aus eigener kraft aber keine funktionsfähige lösung zustande bringt und deshalb nach einer solchen anfragt und auch bekommt. so funktioniert lernen nunmal.
|
atrox
in fairy dust... I trust!
|
also diesem thread kann man weder vorwerfen daß er keinen lerneffekt gebracht hat, daß sich der poster nicht damit vorher beschäftigt hat, noch daß die lösung gänzlich von wem anderen gefertigt wurde.
man kann sich nun streiten welcher der 3 punkte wie stark ausgeprägt ist, aber ein typischer "hilfe, will mich nicht beschäftigen, macht mir bitte meine hausübung"-thread war es nicht. ein paar zeilen pseudocode - als hilfe - schmälern vielleicht die eigenleistung, reduzieren sie aber nicht nahe der 0. (für mich währe der aufwand größer gewesen, den lösungshinweis in einen schön formulierten text zu gießen, als die paar zeilen)
IMHO war die eskalation deshalb unangebracht. (obwohl hier im forum der instinkt, hü-beispiele zu entdecken und arbeitsunwillige zu enttarnen stark ist)
Bearbeitet von atrox am 07.05.2003, 16:54
|