Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Fragen zum CSV-Export

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Fragen zum CSV-Export

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 450 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Smartin
    schrieb am zuletzt editiert von
    #1

    Moin,

    zwei Fragen zum CSV-Export
    1:

    fs.appendFileSync("/opt/iobroker/iobroker-data/test.csv", string);
    

    hängt die string-Zeile unten an die CSV-Datei an.

    fs.writeFile("/opt/iobroker/iobroker-data/test.csv", string);
    

    überschreibt die bisherige Datei.
    Wie aber kriege ich es hin, dass die aktualisierte test.csv z.B. nur noch die letzten 9 Einträge + die neue Zeile enthält ?

    2:
    Ich logge in einer anderen CSV-Datei (2022.csv) tägliche Werte (Temp, Hum, Stromverbrauch, Kosten usw.).
    Wie müsste ich vorgehen damit am 01.01.2023 automatisch eine neue leere 2023.csv angelegt wird und die Werte ab dann in diese Datei gespeichert werden?

    Gruß aus dem Norden

    OliverIOO 1 Antwort Letzte Antwort
    0
    • S Smartin

      Moin,

      zwei Fragen zum CSV-Export
      1:

      fs.appendFileSync("/opt/iobroker/iobroker-data/test.csv", string);
      

      hängt die string-Zeile unten an die CSV-Datei an.

      fs.writeFile("/opt/iobroker/iobroker-data/test.csv", string);
      

      überschreibt die bisherige Datei.
      Wie aber kriege ich es hin, dass die aktualisierte test.csv z.B. nur noch die letzten 9 Einträge + die neue Zeile enthält ?

      2:
      Ich logge in einer anderen CSV-Datei (2022.csv) tägliche Werte (Temp, Hum, Stromverbrauch, Kosten usw.).
      Wie müsste ich vorgehen damit am 01.01.2023 automatisch eine neue leere 2023.csv angelegt wird und die Werte ab dann in diese Datei gespeichert werden?

      Gruß aus dem Norden

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @smartin
      1)
      Entweder die csv Datei wieder in eine Datenstruktur einlesen, Daten anhängen und komplett wieder speichern
      Oder alternativ die folgende Funktion des filesystem Objektes von Node verwenden
      appendFile
      https://nodejs.org/api/fs.html#filehandleappendfiledata-options
      writeFile gehört ebenfalls zu diesem Objekt
      2)
      Einen neuen Dateinamen vergeben?
      Ich würde dann den Dateinamen jeweils dynamisch aus dem Datum des aktuellen Jahres ermitteln
      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear?retiredLocale=de

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      S 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @smartin
        1)
        Entweder die csv Datei wieder in eine Datenstruktur einlesen, Daten anhängen und komplett wieder speichern
        Oder alternativ die folgende Funktion des filesystem Objektes von Node verwenden
        appendFile
        https://nodejs.org/api/fs.html#filehandleappendfiledata-options
        writeFile gehört ebenfalls zu diesem Objekt
        2)
        Einen neuen Dateinamen vergeben?
        Ich würde dann den Dateinamen jeweils dynamisch aus dem Datum des aktuellen Jahres ermitteln
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear?retiredLocale=de

        S Offline
        S Offline
        Smartin
        schrieb am zuletzt editiert von Smartin
        #3

        @OliverIO
        Zu 1)
        Ok, da stehe ich als JS-Greenhorn komplett auf der Leitung und weiß leider nicht wie ich das beides nutzen müsste (node Version 14.20.0)

        Zu 2)
        Wäre das so richtig um den Dateinamen dynamisch zu setzen bzw. zu verwenden?

        var today = new Date();
        var year = today.getFullYear();
        var csv_pfad = "/opt/iobroker/iobroker-data/" + year + ".csv";
        fs.appendFileSync(csv_pfad, string);
        
        OliverIOO 1 Antwort Letzte Antwort
        0
        • S Smartin

          @OliverIO
          Zu 1)
          Ok, da stehe ich als JS-Greenhorn komplett auf der Leitung und weiß leider nicht wie ich das beides nutzen müsste (node Version 14.20.0)

          Zu 2)
          Wäre das so richtig um den Dateinamen dynamisch zu setzen bzw. zu verwenden?

          var today = new Date();
          var year = today.getFullYear();
          var csv_pfad = "/opt/iobroker/iobroker-data/" + year + ".csv";
          fs.appendFileSync(csv_pfad, string);
          
          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #4

          @smartin
          Ja sieht gut aus.
          Allerdings macht append genau das was es heißt, es hängt an.
          Csv besteht ja einmal aus der ersten Zeile mit den Feld Bezeichnungen und dann beliebig viele Zeilen mit den Daten
          Wenn du eine neue Datei anlegst solltest du die erste Zeile mit writeFile schreiben und danach kannst du die anhängen.
          Ob du die erste Zeile schreiben musst kannst du am besten daran feststellen ob dieser Dateiname existiert.
          Dazu kann folgender schnipfel hilfreich dein

          
          fs.stat('foo.txt', function(err, stat) {
            if (err == null) {
              console.log('File exists');
            } else if (err.code === 'ENOENT') {
              // file does not exist
              fs.writeFile('log.txt', 'Some log\n');
            } else {
              console.log('Some other error: ', err.code);
            }
          });
          
          

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          S 1 Antwort Letzte Antwort
          1
          • OliverIOO OliverIO

            @smartin
            Ja sieht gut aus.
            Allerdings macht append genau das was es heißt, es hängt an.
            Csv besteht ja einmal aus der ersten Zeile mit den Feld Bezeichnungen und dann beliebig viele Zeilen mit den Daten
            Wenn du eine neue Datei anlegst solltest du die erste Zeile mit writeFile schreiben und danach kannst du die anhängen.
            Ob du die erste Zeile schreiben musst kannst du am besten daran feststellen ob dieser Dateiname existiert.
            Dazu kann folgender schnipfel hilfreich dein

            
            fs.stat('foo.txt', function(err, stat) {
              if (err == null) {
                console.log('File exists');
              } else if (err.code === 'ENOENT') {
                // file does not exist
                fs.writeFile('log.txt', 'Some log\n');
              } else {
                console.log('Some other error: ', err.code);
              }
            });
            
            
            S Offline
            S Offline
            Smartin
            schrieb am zuletzt editiert von
            #5

            @oliverio
            Super, vielen Dank. Habe 2) mit deinem Codeschnipfel :blush: eben mit ein wenig basteln hinbekommen. Klappt jetzt super, erst Prüfung ob Datei vorhanden ist, falls ja kommt der Log oder falls nicht wird eine neue Datei mit dynamischem Dateinamen erstellt, Kopfzeilen eingetragen und dann die Daten geloggt. Perfekt!

            Kann mir noch jemand bei 1) helfen ?
            Wenn ich es richtig verstehe müsste

            • die bestehende CSV-Datei test.csv in eine Variable eingelesen werden
            • dort dann alles außer die letzten x Zeilen gelöscht werden
            • die bestehende test.csv gelöscht werden
            • die Datei neu erstellt werden
            • die Kopfzeilen eingetragen werden
            • die übrig gebliebenen Zeilen und die neuen Logs angehängt werden

            Das einlesen und das heraus parsen der Zeilen schaffe ich nicht.
            Ich vermute, dass das einlesen mit

            const data = fs.readFileSync('test.csv', 'utf8');
            

            funktioniert. Aber wie es dann weitergehen würde ... :white_frowning_face:

            Oder ist das sowieso alles viel zu umständlich gedacht?

            OliverIOO 1 Antwort Letzte Antwort
            0
            • S Smartin

              @oliverio
              Super, vielen Dank. Habe 2) mit deinem Codeschnipfel :blush: eben mit ein wenig basteln hinbekommen. Klappt jetzt super, erst Prüfung ob Datei vorhanden ist, falls ja kommt der Log oder falls nicht wird eine neue Datei mit dynamischem Dateinamen erstellt, Kopfzeilen eingetragen und dann die Daten geloggt. Perfekt!

              Kann mir noch jemand bei 1) helfen ?
              Wenn ich es richtig verstehe müsste

              • die bestehende CSV-Datei test.csv in eine Variable eingelesen werden
              • dort dann alles außer die letzten x Zeilen gelöscht werden
              • die bestehende test.csv gelöscht werden
              • die Datei neu erstellt werden
              • die Kopfzeilen eingetragen werden
              • die übrig gebliebenen Zeilen und die neuen Logs angehängt werden

              Das einlesen und das heraus parsen der Zeilen schaffe ich nicht.
              Ich vermute, dass das einlesen mit

              const data = fs.readFileSync('test.csv', 'utf8');
              

              funktioniert. Aber wie es dann weitergehen würde ... :white_frowning_face:

              Oder ist das sowieso alles viel zu umständlich gedacht?

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von
              #6

              @smartin

              1. ODER 2)
                du hast doch die aufgabe schon gelöst,
                oder willst du es als challenge auch lösen?

              um mit csv dateien umgehen zu können lohnt es sich das rad nicht neu zu erfinden,
              sondern eine bibliothek zu nutzen. muss man sich allerdings etwas einlesen. aber man muss viele probleme nicht lösen, da es der author schon gemacht hat.

              https://www.npmjs.com/package/csv
              die kann csv lesen und auch schreiben. details stehen in der doku auf github

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              760

              Online

              32.5k

              Benutzer

              81.6k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe