Homepage-Webhilfe Event-Banner

Date vom lokalen Rechner Laden

Gupbee
Benutzer
Registriert seit:
  » 16.03.2020 13:33:12
Letzter Besuch:
  » 16.03.2020 13:33:34

Date vom lokalen Rechner Laden

#1
zuletzt editiert von Admin-Webhelfer am 16.03.2020 19:38:00

Hallo,


ich möchte Daten vom lokalen Rechner

mit JavaScript laden da regional oft keine Internetzugang möglich ist. Mit euerem Beispiel Skript


https://blog.homepage-webhilfe.de/Artikel/dateien-vom-pc-mit-hilfe-von-javascript-einlesen/


kann ich die Datei als Text Datei prima fehlerfrei lesen. Wie speicherer ich die gelesene Textdatei zur Verarbeitung in einer Variable?

da läuft bei mir irgendetwas falsch. Wer kann helfen?

Anbei der reichlich kommentierte programmcode.


function OnShowSelectedFile()   // Original siehe  //https://blog.homepage-webhilfe.de/Artikel/dateien-vom-pc-mit-hilfe-von-javascript-einlesen/ 
            
            
      ......            
             
            // Lesen der Datei als Text starten
            
              oReader.readAsText(aFileList[0]);
              var fileContent = oReader.result;    // hier mache ich etwas falsch, der inhalt des Textfiles soll in die Variable "fileContent" geschrieben werden
                 
      .......
    
    
      // Weiterverarbeitung funktioniert - Die in die Variable "fileContent" als Text eingelesenen Daten (csv Format, Trennzeichen ; und \n ) in das 2D Array BeeHiveData[][] splitten 
    
        var BeeHiveData = [];
        // var fileContent = 'Ja; Das; Ist ; Oben; ' + '\n' + 'und; das; ist; mitte;' + '\n' + 'aber;das;ist;unten;' ;  // Das ist nur ein Beispieltext zum testen der folgenden Zeilen
    
        var rodArray = fileContent.split('\n');                          // Als Text eingelesenen Daten in ein Array splitten (Trennzeichen hier "\n" )
        
        for (var i = 0; i < rodArray.length; i++) {                      // Über alle Zeilen iterieren
                 
                if (rodArray[i].length > 1) {                            // Nur wenn die Größe einer Zeile > 1 ist (sonst ist in der Zeile leer)
                   var elementArray = rodArray[i].split(";");            // Zeile am Trennzeichen ";" trennen  
                   elementArray.splice(elementArray.length - 1, 1);      // überflüssiges Element am Ende entfernen 
                   BeeHiveData.push(elementArray);                       // Array der Zeile dem Ergebnis Array hinzufügen -> Ergebnis ist ein 2D Array BeeHiveData[0][0]
               } 
        } 

    console.log(BeeHiveData);                                            // Ausgabe des 2D Arrays mit den Daten zur Kontrolle des Ergebnisses auf Konsole
}

</script>
Admin-Webhelfer
Administrator
Registriert seit:
  » 18.07.2017 20:00:00
Letzter Besuch:
  » 01.11.2023 20:37:25

Re: Date vom lokalen Rechner Laden

#2

Hallo Gupbee,


herzlich Willkommen im Forum. Moderation/welcome

Gerne bin ich dir bei deiner Frage behilflich! wave


Die Funktion readAsText() ist eine sogenannte asynchrone Funktion, d. h. hier wird das Auslesen des Texts nur gestartet. Wenn du die Funktion aufrufst, kannst du danach nicht direkt auf das Ergebnis mittels der Eigenschaft result zugreifen.


Wenn du dir das Beispiel nochmal anschaust, siehst du, dass der Zugriff auf den Textinhalt erst innerhalb der anonymen Funktion erfolgt, die dem Event loadend zugeordnet ist. Denn erst dann ist die Eigenschaft reuslt auch gültig.


Wenn ich jetzt deinen Code nehme, denn müsste dies ungefähr so aussehen:

function OnShowSelectedFile() {
    // Initialisierung durchführen
    // ...
    
    // Event-Funktion für Weiterverarbeitung definieren
    oReader.onloadend = function() {
        // Sicherstellen, dass kein Fehler aufgetreten ist
        if (oReader.error == null) {
            var fileContent = oReader.result;
            var BeeHiveData = [];
            var rodArray = fileContent.split('\n');                     // Als Text eingelesenen Daten in ein Array splitten (Trennzeichen hier "\n")
            
            for (var i = 0; i < rodArray.length; i++) {                 // Über alle Zeilen iterieren
                if (rodArray[i].length > 1) {                           // Nur wenn die Größe einer Zeile > 1 ist (sonst ist in der Zeile leer)
                    var elementArray = rodArray[i].split(";");          // Zeile am Trennzeichen ";" trennen
                    elementArray.splice(elementArray.length - 1, 1);    // überflüssiges Element am Ende entfernen
                    BeeHiveData.push(elementArray);                     // Array der Zeile dem Ergebnis Array hinzufügen -> Ergebnis ist ein 2D Array BeeHiveData[0][0]
                }
            }
            
            console.log(BeeHiveData);                                   // Ausgabe des 2D Arrays mit den Daten zur Kontrolle des Ergebnisses auf Konsole
        // Andernfalls ist ein Fehler aufgetreten
        } else {
            // Fehlerbehandlung durchführen
            // ...
        }
    };
    
    // Lesen der Datei als Text starten
    //  => Wenn das Lesen der Datei abgeschlossen ist, wird das Event loadend ausgelöst
    oReader.readAsText(aFileList[0]);
}

Falls noch Fragen sind, kannst du dich ja nochmal melden. smile

Mit freundlichen Grüßen

Benjamin Jung

alias Admin-Webhelfer

» Hallo Gast • AnmeldenRegistrieren
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK