Kopieren von Dateien..



  • Hallo,

    Bin etwas am verzweifeln.. Und zwar will ich mittels des unten stehenden codes eine Textdatei kopieren. Funktioniert soweit auch ganz gut.. Nun bestehen die Nummern z.B. aus 932.433, 882.933 etc.. nun soll aber das Programm eine bestimmte Nummer rauspicken und NUR diese in die zweite Textdatei kopieren, in diesem Fall wären das alle Nummern mit der Anfangszahl 9xx.xxx.

    #include<stdio.h>
    #include<stdlib.h>
    
    int copyMatNr9 (FILE *fin, FILE *fout)
    {
    	int anzahlKopierterDaten = 0;
    	int vorgaenger, nachfolger;
    
    	while(!feof(fin))
    	{
    		fscanf(fin, "%d.%d", &vorgaenger, &nachfolger);
    		fprintf(fout, "%d.%d\n", vorgaenger, nachfolger);
    		anzahlKopierterDaten++;
    	}
    
    	return anzahlKopierterDaten;
    }
    
    int main(void)
    {
    	FILE *fin = NULL, *fout = NULL;
    	int noMatrNr;
    	char *finname = "eingabe.txt", *foutname = "ausgabe.txt";
    
    	// Dateien öffnen
    	fin = fopen(finname, "r");
    	fout = fopen(foutname, "w");
    
    	// Überprüfen, ob die Dateien geöffnet werden konnten
    	if((fin && fout) != NULL)
    	{
    		noMatrNr = copyMatNr9(fin, fout);
    		printf("Datei %s enthaelt %d 9er Matrikelnummern\n", foutname, noMatrNr);
    		system("pause");
    		exit(1);
    	}
    	else
    	{
    		printf("Die Datei konnte nicht geoeffnet werden!\n");
    		system("pause");
    		exit(1);
    	}
    
    	return 0;
    }
    


  • Du musst also eine Eigenschaft von vorgaenger überprüfen.
    Und wenn diese zutrifft, kopierst du.



  • if((fin && fout) != NULL)
    

    Das sieht sehr verunglückt aus.

    while(!feof(fin))
        {
            fscanf(fin, "%d.%d", &vorgaenger, &nachfolger);
            fprintf(fout, "%d.%d\n", vorgaenger, nachfolger);
            anzahlKopierterDaten++;
        }
    

    Das ist Müll.
    Was passiert z.B. bei 999.009 ?
    Du gibst 999.9 in die Zieldatei aus, was wohl kaum beabsichtigt ist.



  • Ich würde es so versuchen.

    #include<stdio.h>
    #include<stdlib.h>
    
    int copyMatNr9 (FILE *fin, FILE *fout)
    {
      int anzahlKopierterDaten = 0;
      int vorgaenger, nachfolger;
    
      while(!feof(fin))
      {
        fscanf(fin, "%d.%d", &vorgaenger, &nachfolger);
        if(vorgaenger >=900 && vorgaenger < 1000)
        {
          fprintf(fout, "%03d.%03d\n", vorgaenger, nachfolger);
          anzahlKopierterDaten++;
        }
      }
      return anzahlKopierterDaten;
    }
    


  • Ich würde es so versuchen.

    int copyMatNr9 (FILE *fin, FILE *fout)
    {
      int anzahlKopierterDaten = 0, vorgaenger;
      char s[10];
    
      while( 2==fscanf(fin, "%d%9s", &vorgaenger, s) )
      {
        if( vorgaenger >=900 )
        {
          fprintf(fout, "%d%s\n", vorgaenger, s);
          anzahlKopierterDaten++;
        }
      }
      return anzahlKopierterDaten;
    }
    

Log in to reply