Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

 

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.