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.txt

    A34521
    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.txt

    34522
    
    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.


Anmelden zum Antworten