Zum Inhalt springen
  • 0

C - Mehrere Zeilen einer Quelldatei in Zieldatei schreiben


Frage

Geschrieben

Hi,

Ich will aus einer Datei 2 Zeilen in eine Zieldatei schreiben.
Dabei handelt es sich um die 33. Zeile und die 18. Zeile der Quelldatei. 
Die 33. Zeile der Quelldatei soll als erstes in die Zieldatei geschrieben werden, danach die 18. Zeile.

Das lesen der Zeilen funktioniert auch, allerdings wird nur die 33. Zeile in die Queldatei geschrieben, die 18. Zeile dann nichtmehr.

#include <iostream>
#include <stdio.h>
using namespace std;


char tempDate[255];
char date[255];

char tempSubject[255];
char subject[255];


char *getDate(FILE *file, int anzahl) {
   if (anzahl == 33)
   {
   int i;
   for(i = 0; i < anzahl-1; i++)
      if(fgets(tempDate, 255, file) == NULL)
         /* Bis zur n-ten Zeile lesen */
         return NULL;

   if(fgets(date,255,file) == NULL)
      return NULL;
   return date;
   }
   else if (anzahl == 18)
   {
   int i;
   for(i = 0; i < anzahl-1; i++)
      if(fgets(tempSubject, 255, file) == NULL)
         /* Bis zur n-ten Zeile lesen */
         return NULL;

   if(fgets(subject,255,file) == NULL)
      return NULL;
   return subject;
   }
}



int main()
{
    FILE *email;
    FILE *ziel;
    unsigned int line;
    char *lineDate;
    char *lineSubject;


    if ((email= fopen("email.txt", "rt"))== NULL) {
            printf("Fehler beim Oeffnen der Datei\n");
    }
   else
   	{
        ziel = fopen("zieldatei.txt", "w");
        lineDate = getDate(email, 33);
        fputs(lineDate, ziel);
        lineSubject = getDate(email, 18);
        fputs(lineSubject, ziel);

    }
}

Meine Vermutung ist, dass die Zeilenposition dann in der 33. Zeile ist und ich somit nicht auf die 18. Zeile der Quelldatei zugreifen kann.

Ich hab es mal mit der Methode "fseek(email, 0, SEEK_SET) probiert, hat aber nicht funktioniert. Vielleicht hab ich die Methode auch nur falsch implementiert.

Und ja, der Code mag erstmal schlecht sein, bin noch anfänger.

Hoffe mir kann jemand helfen :D

3 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben

Ich hätte mir da auch ein Struct gebaut, was mir die benötigten Informationen der Textdatei bereitstellt und hätte das Struct mittels einer Funktion gefüllt. 

Der Name der Funktion getDate() suggeriert auch was anderes. Vor allem ist der Parameter "anzahl" totaler Unfug. Erstmal stimmt der Name nicht, weil man nicht irgendeine Anzahl (von was?) reinreicht, sondern die Zeilennummer, wo das Datum steht. Warum muss der Aufrufer der Funktion dies überhaupt wissen? Das nächste ist, dass der Aufrufer der Funktion wissen muss, dass nur zwei Werte erlaubt sind (18 und 33). Alle anderen Zahlen führen zu einem NULL. Wenn sich auch mal die Zeilennummer ändert, dann muss man auch noch zu allem Übel zwei Stellen im Code anpassen. Da die getDate()-Funktion sowohl das Datum von Zeile 18 als auch das Datum aus Zeile 33 zurückgibt, macht die Funktion zwei Dinge und somit erhöht sich auch die Komplexität der Funktion und wird schlechter les- und testbar. Da sie eben im Grunde auch zwei Mal das gleiche tut, haben wir hier sogar noch eine Codeverdoppelung und müssen im Falle eines Fehlers wieder zwei Stellen im Code anpassen.

 

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...