Einen Teiltext in eine andere Datei schreiben
-
Etwas aufwendiger als das ist es vermutlich schon - du mußt anhand der Trennzeichen umschalten zwischen "schreiben" und "nicht schreiben":
bool write=false; while((c=fgetc(d1))!=EOF) { if(c=='{')//Beginn des Blocks write=true; if(c=='}')//Ende des Blocks { write=false; fputc(d2,c); } if(write) fputc(d2,c); }(PS: Wir sind hier im C**++** Board, da solltest du lieber fstreams verwenden anstelle von FILE*)
-
Ah danke, hat funktioniert.
Mein Ausbilder hats so gelöst:
int L01_RedFil(char* FilNam)
{
FILE *d1 = fopen(FilNam,"r");
FILE *d2 = fopen("output.txt","w");int c,Flag,d;
Flag=0;
while((c=fgetc(d1))!=EOF)
{
if(c=='{') { Flag = 1; continue; }
if(c=='}') { Flag = 0; fprintf(d2,"\n"); }if(Flag) fprintf(d2,"%c",c);
}fclose(d1);
fclose(d2);return(0);
}Eine Frage: Jetzt im Moment schreibt er 2 Zeilen in die Output.txt, jetzt will er noch, dass das nummeriert wird. Also 1., 2. usw... Wie stell ich das an? Mach ich das mit: enum TNumberingStyle (nsBullet);?
-
Du kannst dir einen Zähler mitführen und dann setzt du vor das
continue;einfprintf(d2,"%d. ",++zeile);.
-
funktioniert wunderbar danke nur leider zählt er so:
-
Du solltest den Zähler eventuell auch mit einem vernünftigen Wert initialisieren

-
wie mach ich das?
Hab oben d=1 gemacht, aber ändert sich nix.
<--- anfänger at work

-
Normalerweise, indem du direkt bei der Variablen-Deklaration einen Startwert angibst (ala
int zeile=0;).Achja: Was ist nun wieder d?
PS: sfds (nur für die Zukunft)
-
hätt ich auch selber drauf kommen können.

was ich als nächstes machen muss is die einzelnen Punkte einklammern.
Soll so aussehen:
01. <Feld 01>
.
.
.Ich hab bisher nur geschafft dass das so aussieht:
0<1<.< <f<e<l<d< <0<1<
-
Dazu packst du die Ausgabe der öffnenden Klammer mit in den
if(c=='{')Block und der schließenden Klammer in denif(c=='}')Block.PS: Kannst du mal die komplette Aufgabe zusammenfassen? Diese ständigen "als nächstes"-Ergänzungen ziehen den Thread imho nur unnötig in die Länge

-
das Problem is, ich weiß selber nich was als nächstes kommt. Denn zu mir heißst es auch "Als nächstes..."

-
Jetzt bin ich bei chars angelangt

int L01_RedFil(char* FilNam) { char s1[100]; char s2[100]; FILE *d1 = fopen(FilNam,"r"); FILE *d2 = fopen("output.txt", "w"); sprintf(s1,"Test1"); sprintf(s2,"Test1"); Etc_RedStr(d1,s1,'{','}',50); Etc_RedStr(d1,s2,'{','}',50); fprintf(d2,"s1 nach etc: %s\n",s1); fprintf(d2,"s2 nach etc: %s\n",s2); fclose(d1); fclose(d2); return(0); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ int Etc_RedStr(FILE* d,char* s,char ka,char kz,int nMax) { int c,nc=0; while((c=fgetc(d1))!=ka) if(c==EOF) return(-1); while((c=fgetc(d1))!=kz) { if(c==EOF) return(-1); s[nc++] = c; } return(c); }Ich will den String in Klammer (befindet sich wieder in der 1. Datei, genannt input.txt) einzeln auslesen und dann die char zählen und mir ausgeben lassen.
-
Also hab ich hier keine Hilfe mehr zu erwarten??

Bye!
-
Was genau willst du denn zählen? Die Länge eines gegebenen Strings (Anzahl der enthaltenen char's) kann dir die Funktion strlen() liefern.
PS: Wenn du schon eine Maximalgröße an deine Funktion übergibst, solltest du auch sicherstellen, daß du sie nicht überschreitest. Und vor der Rückgabe des Strings solltest du ein '\0' hinten dranhängen:
int Etc_RedStr(FILE* d,char* s,char ka,char kz,int nMax) { int c,nc=0; while((c=fgetc(d1))!=ka) if(c==EOF) return(-1); while((c=fgetc(d1))!=kz) { if(c==EOF) return(-1); s[nc++] = c; if(nc>=nMax-1) break;//Sicherheitsüberprüfung - reicht der Platz? } s[nc]='\0';//Null-Terminator anhängen return nc; //Es ist vielleicht günstiger, die Anzahl der gelesenen Zeichen zurückzugeben, dann erübrigt sich die Zählung }
-
die Null is für?
-
Chris236 schrieb:
die Null is für?
die weitere Verarbeitung - die Stringverarbeitungsfunktionen von C verwenden \0 als Markierung "hier ist der String zu Ende". Und da ich mal davon ausgehe, daß diese Aufgabe noch nicht fertig ist, solltest du besser gleich vorausplanen.
-
Ein C-String ist auch als Nullterminierter String bekannt und endet wie der Name schon sagt mit einem Nullbyte. Ansonsten weiss man nicht wo der String aufhört da man in der Regel nur einen Zeiger auf ein char hat aber nicht die länge des Strings.
-
CStoll schrieb:
Chris236 schrieb:
die Null is für?
Und da ich mal davon ausgehe, daß diese Aufgabe noch nicht fertig ist, solltest du besser gleich vorausplanen.
Geh ich auch von aus.

-
Ich hab aber noch keine Ausgabe, wo er mir dann sagt, wieviele Zeichen es sind oder? Zumindest, gibt er mir nix aus, wenn ich das Programm starte.
-
Die Funktion Etc_RedStr() (in der Version, die ich unten gepostet habe) liefert die Anzahl der kopierten Zeichen als Rückgabewert zurück - diese mußt du nur abfangen und ausgeben:
int len1 = EtC_RedStr(d1,s1,'{','}',99);//du hast Platz für 99 Zeichen plus '\0', also kannst du den auch ausschöpfen fprintf(d2,"s1 nach etc: %s - Länge %d",s1,len1);(PS: Es wäre auch gut, wenn du zwischendurch etwas mitdenken würdest ;))
-
CStoll schrieb:
(PS: Es wäre auch gut, wenn du zwischendurch etwas mitdenken würdest ;))
Ich mach im Moment 8Std täglich nix anderes wie das...
Heute fällts mir n bissl schwer, außerdem bin ich irgendwie noch net so richtig in der Lage mich da richtig reinzudenken...