Textfiles einlesen und in ein zweites Textfile kopieren
-
Mein problem ist, dass die Textdatei nicht korrekt kopiert wird.
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> int copyMatNr(FILE *fin, FILE *fout) { char str[10]; int counter = 0; // Einlesen des Inhaltes aus "material_in.txt" fscanf(fin, "%s", str); // Wörter in der Textdatei "material_in.txt" lesen if(fin != NULL) { // char * fgets ( char * str, int num, FILE * stream ); // str = Pointer to an array of chars where the string read is stored. // num = Maximum number of characters to be read (including the final null-character). // Usually, the length of the array passed as str is used. // stream = Pointer to a FILE object that identifies the stream where characters are // read from. To read from the standard input, stdin can be used for this parameter. while(fgets(str, sizeof(str), fin)) { counter++; // Höchzählen/Aufaddieren der // der Materialnummern // Suche Buchstabe 'A' im array if(*str == 'A') { // Ersetze Buchstaben 'A' durch 'LEERZEICHEN' // lösche 'LEERZEICHEN' mit -1 *str = ' ' - 1; // Ausgabe des Kopierten Inhaltes nach "material_out.txt" // Ausgabe erfolgt als Zeilenumbruch fprintf(fout, "%s\n", str); } } } return counter; } int main (void) { FILE *fi = NULL, *fo = NULL; int anzahlMatNr; char inName[] = "material_in.txt", outName[] = "material_out.txt"; // Öffnen der Dateien "material_in.txt" und "material_out.txt" fi = fopen("material_in.txt", "r"); // "r", die Datei material_in.txt wird // Schreibgeschützt geöffnet fo = fopen("material_out.txt", "w"); // "w", die Datei material_out.txt wird // ohne Schreibschutz geöffnet anzahlMatNr = copyMatNr(fi, fo); // Wertübergabe an *fin *fout printf("Datei %s enthaelt %d Materialnummern\n", inName, anzahlMatNr); // Schließen der Dateien fclose(fi); fclose(fo); getchar(); return 0; }
Im vorgegebenen Textfile sieht es folgendermaßen aus
Textfile: material_in.txtA34521 A34522 A34523 A34524
Und hier der Kopierte Text. Im CMD gibt er aus das 4 Zeilen kopiert wurden (was auch laut Aufgabenstellung gemacht werden soll) aber es wurden nur 3 ins neue File geschrieben.
Textfile: material_out.txt34522 34523 34524
Wie schaffe ich es, dass die erste Zeile mitübernommen wird?
-
#include "stdafx.h" /* MS Schrott, brauchst du nicht, raus damit */ fscanf(fin, "%s", str); /* totaler Unsinn, was soll das hier, raus damit */ *str = ' ' - 1; /* was soll das, raus mit "-1" */ Zusätzlich hier noch notwendig: if( str[strlen(str)-1]=='\n' ) str[strlen(str)-1]='\0';
-
Wutz schrieb:
[cpp]#include "stdafx.h" /* MS Schrott, brauchst du nicht, raus damit */
ich benutze visual studio als win 32 console application, daher brauch ich das.
*str = ' ' - 1; /* was soll das, raus mit "-1" */
ich hab das irgendwie so hingebastelt, dass der anfangsbuchstabe A gelöscht werden soll und anschließend, das leerzeichen auch rausgenommen wird.. habs sonst nicht besser hinbekommen..
Zusätzlich hier noch notwendig:
if( str[strlen(str)-1]=='\n' ) str[strlen(str)-1]='\0';[/cpp]werd ich mal ausprobieren...
-
Daniel85 schrieb:
Wutz schrieb:
#include "stdafx.h" /* MS Schrott, brauchst du nicht, raus damit */
ich benutze visual studio als win 32 console application, daher brauch ich das.
Nein auch VS solltest du ohne:
#include "stdafx.h"
betreiben können. Hab kein VS, aber hier im Forum wurde schon oft beschrieben wie es geht. Versuch es mal einfach auszukommentieren. Ich weiss: try and error ist suboptimal. Sonst musst du dich halt schlau machen was macht:
#include "stdafx.h"
und warum gibt es das nur bei VS
Oder wird das von Schule oder Studium so gefordert
Wir lernen ja hier im Forum nix ist unmöglich.
Das steht aber nicht im C-Standard.
Das ist braucht nicht der Compiler von VS. Das ist nur ein Vorschlag der IDE von Microsoft.Aber
#include "stdafx.h"
schadet meist auch nicht.
MfG f.-th.