HTML Seiten erstellen lassen.



  • Hallo Community,
    ich habe eine Aufgabe gestellt bekommen aus Bilder und einer Textdatei eine HTML Seite zu erstellen. Die Text Datei soll ins Programm eingelesen werden.

    Hier einfach mal die Aufgabenstellung:

    1. Schreiben Sie ein C-Programm, das die Liste aus dateien.txt liest und
    daraus eine Webseite mit entsprechenden img-Elementen erzeugt und in
    einer html-Datei speichert (eine Datei mit allen Bildern). Sie können den
    HTML-Text aus einer anderen Datei lesen (exiblere Lösung) oder fest im
    Programm eintragen.
    2. Erweitern Sie das Programm so, dass für jedes Bild eine eigene HMTL-Seite
    angelegt wird.

    Den ersten Teil konnte ich ganz einfach lösen. (hoffe zumindest das es so richtig ist) Beim 2. Teil hänge ich nun. Möchte dies in eine Schleife packen und eventuell mit Zeigern arbeiten, jedoch weiss ich nicht ganz wie ich dies realisieren kann.
    (Zeiger in einem HTML Text ? (geht das überhaupt) ?

    Hier mal mein Code den ich bisher geschrieben habe:

    #include <stdio.h>
    FILE * dateien;
    //um die Datei zu benutzen
    char FileContent[100];
    // um den String den wir auslesen zu speichern
    int i=0;
    int main()
    {
    dateien=fopen("Index.html","w");
    // Index.html zum schreiben öffnen
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=A0.png width=236 height=300><img src=C13.png width=236 height=300><img src=D23.png width=236 height=300><img src=F31.png width=264 height=300><img src=J110.jpg width=238 height=300><img src=K44.png width=297 height=300><img src=L7.png width=279 height=300><img src=M51.png width=294 height=300><img src=N65.png width=236 height=300><img src=R132.jpg width=236 height=300><img src=S143.jpg width=250 height=300><img src=T80.png width=200 height=300></body></html>");
    // HTML File erzeugen
    fclose(dateien);
    // Die Datei schließen
    
    dateien=fopen("Bild1.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=A0.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild2.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=A88.jpg></html>");
    fclose(dateien);
    
    dateien=fopen("Bild3.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=C13.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild4.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=D23.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild5.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=F31.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild6.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=J110.jpg></html>");
    fclose(dateien);
    
    dateien=fopen("Bild7.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=K44.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild8.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=L7.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild9.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=M51.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild10.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=N65.png></html>");
    fclose(dateien);
    
    dateien=fopen("Bild11.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=R132.jpg></html>");
    fclose(dateien);
    
    dateien=fopen("Bild12.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=S143.jpg></html>");
    fclose(dateien);
    
    dateien=fopen("Bild13.html","w");
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=T80.png></html>");
    fclose(dateien);
    
    dateien=fopen("dateien.txt","r");
    // dateien.txt zum lesen
    
    for (i=0; i<13; i++)
    {
    	fscanf(dateien,"%s",FileContent);
    	// mit fscanf den ersten String in dateien auslesen
    	printf("%s\n",FileContent);
    	// und über printf auf die Kommandozeile ausgeben
    }
    
    fclose(dateien);
    // Die Datei schließen
    
    scanf("%s");
    // damit das Konsolenfenster offen bleibt.
    return 0;
    }
    

    Die Textdatei sieht so aus:
    A0.png
    A88.jpg
    C13.png
    D23.png
    F31.png
    J110.jpg
    K44.png
    L7.png
    M51.png
    N65.png
    R132.jpg
    S143.jpg
    T80.png

    Die Bilder sind alle im Hauptordner des Programms gespeichert.

    Über jegliche Hilfe und Verbesserungen im Programm Code wäre ich super dankbar 🙂



  • DeKlu schrieb:

    Den ersten Teil konnte ich ganz einfach lösen. (hoffe zumindest das es so richtig ist)

    Tut mir leid, der ist falsch.
    Du hast den Inhalt von dateien.txt da fest drin.
    Das soll so sein, dass bei geändertem Inhalt von dateien.txt auch andere Dateien mit neuem Inhalt entstehen.

    Eigentlich musst du nur deine for-Schleife aus Zeile 71 etwas aufbohren und den Kram von Zeile 16 bis 66 entsorgen.
    (Die ganzen Wiederholungen der drei Zeilen (fopen, fprintf, fclose) unterscheiden sich nur ganz wenig. Das musst du in die Schleife packen)



  • Hi DirkB,

    danke für die Info. Genau das will ich ja erreichen, nur schaff ich es nicht den html text in die for schleife zu bringen. Wie kann ich denn erreichen, das er durch die For schleife mir mehrere Dateien anlegt mit verschiedenem Namen ? und wie kann ich erreichen das er mir die Textelemente in dateien.txt an die passende stelle von dem html code schreiben kann ?

    Könntest du mir hier meinen Code verändern wenn du es weisst ?

    Wäre echt super dankbar, da ich jetzt schon mehrere Tage dran sitze ohne eine richtige Lösung zu finden.

    DirkB schrieb:

    DeKlu schrieb:

    Den ersten Teil konnte ich ganz einfach lösen. (hoffe zumindest das es so richtig ist)

    Tut mir leid, der ist falsch.
    Du hast den Inhalt von dateien.txt da fest drin.
    Das soll so sein, dass bei geändertem Inhalt von dateien.txt auch andere Dateien mit neuem Inhalt entstehen.

    Eigentlich musst du nur deine for-Schleife aus Zeile 71 etwas aufbohren und den Kram von Zeile 16 bis 66 entsorgen.
    (Die ganzen Wiederholungen der drei Zeilen (fopen, fprintf, fclose) unterscheiden sich nur ganz wenig. Das musst du in die Schleife packen)



  • Indem du die Möglichkeiten von fprintf nutzt. Achte auf das %s.

    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", Filecontent);
    

    Den Dateinamen kannst du mit sprintf zusammen bauen.

    sprintf(dateiname, "Bild%03d.html", i); //dateiname ist ein ausreichend grosses char-Array
    


  • Hi,

    schonmal danke für die Antwort und den code aber wenn ich den so in die for schleife packe, stürzt mir das programm main.exe ab.
    Hast du dies bei dir mal getestet ?
    oder könntest du mir mal die komplette for schleife als code geben, sodass ich die mal testen kann ?

    Vielen Vielen Dank schonmal vorab.

    DirkB schrieb:

    Indem du die Möglichkeiten von fprintf nutzt. Achte auf das %s.

    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", Filecontent);
    

    Den Dateinamen kannst du mit sprintf zusammen bauen.

    sprintf(dateiname, "Bild%03d.html", i); //dateiname ist ein ausreichend grosses char-Array
    


  • DeKlu schrieb:

    ... aber wenn ich den so in die for schleife packe, stürzt mir das programm main.exe ab.

    DA fehlt nja noch was.

    DeKlu schrieb:

    Hast du dies bei dir mal getestet ?

    Nein. Aber daran liegt es nicht.

    DeKlu schrieb:

    oder könntest du mir mal die komplette for schleife als code geben, sodass ich die mal testen kann?

    Nö. Das musst du selber machen. Es ist deine Aufgabe.

    einen Bildname aus datei.txt einlesen
    dateinamen für Ausgabedatei zusammenbauen
    dateien=fopen(dateiname,"w");  // Test auf Erfolg nicht vergessen
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", Filecontent); 	// Wo kommt jetzt Filecontent her??
    fclose(dateien);
    


  • Ok. ich werde es morgen nochmal versuchen, den Code zu schreiben. Habe jetzt nicht mehr den Kopf dafür.

    Falls ich gar nicht drauf komme, würdest du mir helfen beim Code. Bräuchte das für ein Testat um bei einer Klausur mitschreiben zu können ?

    Ich würde mich dann morgen früh nochmal melden, wenn du mir hier nochmal helfen könntest ?

    DirkB schrieb:

    DeKlu schrieb:

    ... aber wenn ich den so in die for schleife packe, stürzt mir das programm main.exe ab.

    DA fehlt nja noch was.

    DeKlu schrieb:

    Hast du dies bei dir mal getestet ?

    Nein. Aber daran liegt es nicht.

    DeKlu schrieb:

    oder könntest du mir mal die komplette for schleife als code geben, sodass ich die mal testen kann?

    Nö. Das musst du selber machen. Es ist deine Aufgabe.

    einen Bildname aus datei.txt einlesen
    dateinamen für Ausgabedatei zusammenbauen
    dateien=fopen(dateiname,"w");  // Test auf Erfolg nicht vergessen
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", Filecontent); 	// Wo kommt jetzt Filecontent her??
    fclose(dateien);
    


  • Hi Dirk,

    ich glaube ich habs fast geschafft. Ging mir jetzt doch nicht aus dem Kopf. Er erstellt mir jetzt auf jeden fall schonmal mehrere HTML Dateien, allerdings habe ich noch einen kleinen Fehler drin und zwar schreibt er mir immer von der Text File die 1. Zeile in den HTML Code.
    Auch bei CMD gibt er mir nur die 1. Zeile von der Text Datei aus. Nur ich komme gerade nicht drauf wo der Fehler ist. Kannst du nochmal drüber schauen ?

    double dateiname[100];
    
    dateien=fopen("dateien.txt","r");  // dateien.txt zum lesen
    
    for (i=0; i<13; i++)
    {
    	fscanf(dateien,"%s", FileContent); // mit fscanf den ersten String in dateien auslesen
    	printf("%s\n", FileContent);  // und über printf auf die Kommandozeile ausgeben
    	sprintf(dateiname, "Bild%03d.html",i);
    	dateien=fopen(dateiname,"w");
    	fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", FileContent);
    	fclose(dateien);   // Die Datei schließen
    }
    scanf("%s");
    // damit das Konsolenfenster offen bleibt.
    return 0;
    }
    

    DirkB schrieb:

    DeKlu schrieb:

    ... aber wenn ich den so in die for schleife packe, stürzt mir das programm main.exe ab.

    DA fehlt nja noch was.

    DeKlu schrieb:

    Hast du dies bei dir mal getestet ?

    Nein. Aber daran liegt es nicht.

    DeKlu schrieb:

    oder könntest du mir mal die komplette for schleife als code geben, sodass ich die mal testen kann?

    Nö. Das musst du selber machen. Es ist deine Aufgabe.

    einen Bildname aus datei.txt einlesen
    dateinamen für Ausgabedatei zusammenbauen
    dateien=fopen(dateiname,"w");  // Test auf Erfolg nicht vergessen
    fprintf(dateien,"<html><head><title>Bilder</title></head><body bgcolor=black><img src=%s></html>", Filecontent); 	// Wo kommt jetzt Filecontent her??
    fclose(dateien);
    

  • Mod

    Zeilen 3, 10 und 12 sind inkonsistent.

    PS: Und Zeile 14 ist totaler Müll. Schalte Compilerwarnungen an und behandle jede Warnung wie einen Fehler!



  • Hi Sepp,

    das Zeile 14 Müll ist, habe ich auch bereits gemerkt. Das habe ich schon rausgeschmissen aus meinem Code.
    Leider check ich immer noch nicht was ich bei meinem Code verbessern muss sodass es funktioniert. Könntest du eventuell meinen Code verbessern ? (habe noch nicht viel Erfahrung in C)
    Wäre super dankbar oder ist das alles mist wie ich es bisher gemacht habe ?

    SeppJ schrieb:

    Zeilen 3, 10 und 12 sind inkonsistent.

    PS: Und Zeile 14 ist totaler Müll. Schalte Compilerwarnungen an und behandle jede Warnung wie einen Fehler!


  • Mod

    DeKlu schrieb:

    Wäre super dankbar oder ist das alles mist wie ich es bisher gemacht habe ?

    Was hast du denn gemacht? So wie ich das sehe, hast du verschiedene Codestücke zusammenkopiert, ohne irgendeinen Plan zu haben, wie ein Programm strukturiert ist. Das ist nicht, wie man programmiert. Und es ist auch genau das Problem bei deinem jetzigen Programm: Du hast jeweils ein paar Zeilen aus unterschiedlichen Programmen zusammengeworfen und hoffst nun, dass das funktioniert, obwohl die Reihenfolge des Ablaufs überhaupt keinen Sinn macht.

    Versetz dich mal in die Rolle eines Computers, der dein Programm abarbeitet. Vollzieh dein Programm Schritt für Schritt nach. Schreib die Werte von Variablen auf, falls du sie dir nicht merken kannst. Dann findest du sehr bald die Fehler in der Logik und es sollte auch klar werden, wie man diese beheben kann. Geh dabei gründlich vor! Tu jeweils genau das, was da steht, nicht das was du denkst, was da steht. Denn nichts anderes tut der Computer. Der Computer kennt nicht deine Absichten, sondern nur den Code. Diesen führt er ganz genau so aus, wie er da steht.



  • Ok danke für die Aufklärung.
    Aber ich tu es einfach nicht raffen wie es funktionieren soll ...
    Kannst du mir nicht mal helfen mit dem Code wenn du weisst wie es geht ?
    Bräuchte das dringend für ein Testat um eine Prüfung mitschreiben zu können. Das wäre das letzte Testat von 10.. Alle anderen habe ich bestanden. Nur an diesem sitze ich nun seit mehreren Tagen und komme nun absolut nicht mehr weiter.
    Dachte gestern zumindest ich hatte ein kleinen Erfolg aber den hast du gerade zunichte gemacht xD

    SeppJ schrieb:

    DeKlu schrieb:

    Wäre super dankbar oder ist das alles mist wie ich es bisher gemacht habe ?

    Was hast du denn gemacht? So wie ich das sehe, hast du verschiedene Codestücke zusammenkopiert, ohne irgendeinen Plan zu haben, wie ein Programm strukturiert ist. Das ist nicht, wie man programmiert. Und es ist auch genau das Problem bei deinem jetzigen Programm: Du hast jeweils ein paar Zeilen aus unterschiedlichen Programmen zusammengeworfen und hoffst nun, dass das funktioniert, obwohl die Reihenfolge des Ablaufs überhaupt keinen Sinn macht.

    Versetz dich mal in die Rolle eines Computers, der dein Programm abarbeitet. Vollzieh dein Programm Schritt für Schritt nach. Schreib die Werte von Variablen auf, falls du sie dir nicht merken kannst. Dann findest du sehr bald die Fehler in der Logik und es sollte auch klar werden, wie man diese beheben kann. Geh dabei gründlich vor! Tu jeweils genau das, was da steht, nicht das was du denkst, was da steht. Denn nichts anderes tut der Computer. Der Computer kennt nicht deine Absichten, sondern nur den Code. Diesen führt er ganz genau so aus, wie er da steht.



  • dateien=fopen("dateien.txt","r");  // dateien.txt zum lesen
    ...
    dateien=fopen(dateiname,"w");
    

    Welche Datei wird mit dem Filedeskriptor dateien verwaltet?
    "dateien.txt" oder dateiname?



  • dateien.txt wird verwaltet.
    D.H. ich brauch noch einen 2. Filedeskriptor oder wie meinst du das ?
    Kann ich denn den geschriebenen Code den ich bisher geschrieben habe weiter verwenden oder ist das Müll ?

    Würde mich echt freuen, wenn Ihr mir bisschen mehr helfen könntet und eventuell den Code verbessern könntet 😞

    DirkB schrieb:

    dateien=fopen("dateien.txt","r");  // dateien.txt zum lesen
    ...
    dateien=fopen(dateiname,"w");
    

    Welche Datei wird mit dem Filedeskriptor dateien verwaltet?
    "dateien.txt" oder dateiname?



  • DeKlu schrieb:

    dateien.txt wird verwaltet.

    Falsch.
    Das ist wie bei

    i=3;
    ..
    i=5;
    

    Welchen Wert hat i am Ende?

    DeKlu schrieb:

    D.H. ich brauch noch einen 2. Filedeskriptor oder wie meinst du das ?

    Ja, brauchst du.
    Woher soll der Compiler sonst wissen, welchen du meinst.

    DeKlu schrieb:

    Würde mich echt freuen, wenn Ihr mir bisschen mehr helfen könntet und eventuell den Code verbessern könntet

    Wir helfen gerne, aber wir machen nicht deine Hausaufgaben.

    Nimm selbsterklärende Variablennamen, benutze Funktionen, entscheide dich für einen Einrückungsstil und wende den auch an.

    Wenn du Code mehr als zweimal per Copy&Paste einfügst und nur geringe Sachen daran änderst, ist das ein Zeichen dafür eine Funktion und/oder Schleife zu nehmen.



  • habs geschafft.
    danke für die Hilfe. ein 2. Filedeskriptor war ausreichend und funktioniert nun alles.
    Ja ich weiss ja das ihr nicht dafür da seit um meine Hausaufgaben zu machen aber manchmal wenn man komplett auf dem Schlauch steht ist es ganz hilfreich mal wieder ein paar Denkanstösse zu bekommen.

    Das mit dem 2. Filedeskriptor war ausschlaggebend. Danke!

    DirkB schrieb:

    DeKlu schrieb:

    dateien.txt wird verwaltet.

    Falsch.
    Das ist wie bei

    i=3;
    ..
    i=5;
    

    Welchen Wert hat i am Ende?

    DeKlu schrieb:

    D.H. ich brauch noch einen 2. Filedeskriptor oder wie meinst du das ?

    Ja, brauchst du.
    Woher soll der Compiler sonst wissen, welchen du meinst.

    DeKlu schrieb:

    Würde mich echt freuen, wenn Ihr mir bisschen mehr helfen könntet und eventuell den Code verbessern könntet

    Wir helfen gerne, aber wir machen nicht deine Hausaufgaben.

    Nimm selbsterklärende Variablennamen, benutze Funktionen, entscheide dich für einen Einrückungsstil und wende den auch an.

    Wenn du Code mehr als zweimal per Copy&Paste einfügst und nur geringe Sachen daran änderst, ist das ein Zeichen dafür eine Funktion und/oder Schleife zu nehmen.


Anmelden zum Antworten