Gesammelte Werte in Array ablegen

gianfranco0104

Erfahrenes Mitglied
So, ich stehe mal wieder, für mich zum., vor einem schweren Thema mit dem ich mich seit einigen Tagen plage.
nach unendlichem suchen im Google habe ich mehrere Beispiele probiert und bin auch gut vorangekommen, aber eines will nicht klappen:

Ich sammle aus einem Ordner via FSO (bleibt ein lokales Webtool) Dateien aus einem Ordner. Diese kann ich auch (s. alert) alle anzeigen lassen. danach kommt ein Konstrukt, welches das Datum herausfindet, und dann müssen beide in ein Array namens "files" hinein. unter Files erzeuge ich später eine Auflistung, das klappt auch aber nur wenn ich sie von Hand mit werten befülle. Da es sich aber immer um neue und andere Dateien handelt benötige ich das Ganze dynamisch.
Hier der Code:
Javascript:
var projName = new Array(); //('Projektname')
var ProjDateRoh = null // eingelesen ('Tue Oct 7 02:53:27 EDT 2008')
var ProjDate = null // später schöner in ('01.04.2014')
//Alle Files und deren Namen Einlesen
var fileAmount = new ActiveXObject("Scripting.FileSystemObject"); 
var folderObj = fileAmount.GetFolder("C:\\cnc\\USER");  //pfad
// erstellen eines Enumerator Typen und Kollektion aller Dateien im Ordner 
var filesCollection = new Enumerator(folderObj.Files); 
var fileObj; 
for (filesCollection.moveFirst(); !filesCollection.atEnd(); filesCollection.moveNext()) { 
    fileObj = filesCollection.item(); 
    projName[null] = fileObj.Name;
    ProjDateRoh = fileObj.Name;

    var text = "";
    for (var i in projName) {
        text += projName[i] + "\n";
    }
    alert(text); //nur zum Test: Popups mit allen Datei-Namen die im Ordner gefunden wurden, diese müssen nun in die Array "var files" rein...
}

// Datum vom letzten Zugriff
var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject"); 
var ProjDateRaw = getProjDateRoh.GetFile("c:\\cnc\\USER\\" + ProjDateRoh);
ProjDateRoh = ProjDateRaw.DateLastAccessed;//, "DD.MM.YY";
getProjDateRoh = null
  // Datum umbauen
  var zeit = new Date(ProjDateRoh);
  ProjDate = ('0' + zeit.getDate()).substr(-2) + "." + ('0' + zeit.getMonth()).substr(-2) + "." + ('0' + zeit.getFullYear()).substr(-2) //mit NULL vor Zahl bei Einstelliger Ziffer

//hier muss die FILEMENGE und deren Datum hinein. 'name': und 'date' werden für meine spätere Auflistung benötigt
var files = [{'name': fileObj.Name.replace(/.cm5/, "") + ',', 'date': ProjDate + '  '}],
...

wer weiß Rat?
 
Hallo,

wo ist jetzt dein genaues Problem?
Javascript:
var gatheredFileData = [];

// in der Schleife
gatheredFileData.push({name: projName[i], date: /* ... */});
Beim Datum war ich mir nicht sicher, woher du das bekommen willst, ansonsten sollte es aber so passen.
 
@ComFreek , danke erstmal. hab nochmals rumprobiert. bekomme nun als text nur [objekt objekt] raus und nicht mehr vereinzelt.

so habe ich es jetzt:
Javascript:
var projName = new Array(); //('Projektname')
var ProjDateRoh = null // ('Tue Oct 7 02:53:27 EDT 2008')
var ProjDate = null // ('01.04.2014')
var arrayFileData = [];
//Alle Files und deren Namen Einlesen
var fileAmount = new ActiveXObject("Scripting.FileSystemObject"); 
var folderObj = fileAmount.GetFolder("C:\\cnc\\USER");  //pfad, später dann in benuzername/dokumente
// erstellen eines Enumerator Typen und Kollektion aller Dateien im Ordner 
var filesCollection = new Enumerator(folderObj.Files); 
var fileObj; 
for (filesCollection.moveFirst(); !filesCollection.atEnd(); filesCollection.moveNext()) { 
    fileObj = filesCollection.item(); 
    projName = fileObj.Name;
    ProjDateRoh = fileObj.Name;
     
    for (var i in projName) {
    arrayFileData.push({'name': projName[i] + ',', 'date': ProjDate + '  '}) //.replace(/.cm5/, "")
    }
}

// Datum vom letzten Zugriff
/* code für date, ähnlich wie bei filename
...
*/

//Filemenge sortieren und in DIV ausgeben
var files = [arrayFileData]

//-------> bisher klappt es nur so
//bräuchte sie vereinzelt - inetwa so...in der ersten Zeile habe ich mal die VAR drin, so passiert auch was, allerdings soll es ja dynamisch gefüllt werden
/*[
        {'name': projName.replace(/.cm5/, "") + ',', 'date': ProjDate + '  '},
        {'name': 'Projektname2' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname3' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname4' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname5' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname6' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname7' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname9' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname9' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname10' + ',', 'date': '29.02.04' + '  '},
        {'name': 'Projektname11' + ',', 'date': '12.02.12' + '  '}
    ]*/ ,
...

Das mit dem Datum handle ich später ähnlich ab...
 
Die Datenstruktur ist genau so, wie du sie in dem Kommentar am Ende des Codes beschreibst.
var fiels = [arrayFileData]; ist falsch! arrayFileData ist schon das von dir gewünschte Array.

Das mit [object object] bekommst du, wenn du das Objekt zu einem String konvertierst. Ich vermute, du nutzt alert(). console.log() wird dir in den meisten Browsern eine genaue Darstellung des Objektes präsentieren.
 
OK, soweit klappt es (fast). Es werden nun alle Dateien aufgelistet aber witziger Weise bekomme ich jede vorhandene Datei diese 12 mal aufgelistet, dann erst die nächste (die auch wieder 12 mal) usw. Der Code momentan:
Java:
var projName = new Array(); //('Projektname')
var ProjDateRoh = null // ('Tue Oct 7 02:53:27 EDT 2008')
var ProjDate = null // ('01.04.2014')
var arrayFileData = [];
//Alle Files und deren Namen Einlesen
var fileAmount = new ActiveXObject("Scripting.FileSystemObject"); 
var folderObj = fileAmount.GetFolder("C:\\cnc\\USER");  //pfad, später dann in benuzername/dokumente
// erstellen eines Enumerator Typen und Kollektion aller Dateien im Ordner 
var filesCollection = new Enumerator(folderObj.Files); 
var fileObj; 
for (filesCollection.moveFirst(); !filesCollection.atEnd(); filesCollection.moveNext()) { 
    fileObj = filesCollection.item(); 
    projName = fileObj.Name;
    ProjDateRoh = fileObj.Name;
      //Auflistung
    for (var i in projName) {
    arrayFileData.push({'name': projName + ',', 'date': ProjDate + '  '}) //.replace(/.cm5/, "")
    }
}

files = arrayFileData,
/* code für auflistung
insertDiv = function(wrapper, file){...
*/

Wenn ich übrigens in der schleife projName einsetze werden die Buchstaben vereinzelt.
 
Ich nehme mal an, dass das daran liegt, dass du arrayFileData in der verschachtelten (2., inneren) for-Schleife jedes Mal befüllst. Wieso musst du über projName nochmal iterieren? Das sind wahrscheinlich genau 12 Iterationen.
 
Was heißt "aber dann eben nur eine"?

Ich kenne nicht die Logik deines Programmes. Wo du es einzufügen hast, kannst nur du wissen. Ich kann höchstens vermuten, wo es hingehören könnte. Wozu brauchst du also die zweite for-Schleife?
 
Also die erste for-schleife ist dazu da um die Dateien aus dem Ordner zu holen.
Javascript:
for (filesCollection.moveFirst(); !filesCollection.atEnd(); filesCollection.moveNext()) {
    fileObj = filesCollection.item();
    projName = fileObj.Name;
    ProjDateRoh = fileObj.Name;

darin setze ich dann mit der zweiten for-schleife auch noch die Datenstruktur zusammen:

Javascript:
for (var i in projName) {
    arrayFileData.push({'name': projName.replace(/.cm5/, "") + ',', 'date': ProjDate + '  '})
    }
}

danach kommt die Auflistung der Dateien:

Javascript:
files = arrayFileData

insertDiv = function(wrapper, file){
        var div = document.createElement('div'),
            content = "",
            _key;

        for(_key in file){
            if(file.hasOwnProperty(_key)){
                content +=  " " + file[_key] + "";
            }
        }
        div.innerHTML = content;
        div.style.display = "inline-block";
        div.className += " metroFileBoxAuto";
        wrapper.appendChild(div);
    };

und momentan ist es so, dass ich eben immer jede Datei 6 mal angezeigt bekomm, dann erst die nächste. Setze ich die for-schleife "for (var i in projName) { arrayFileData.push..." außerhalb der ersten for-schleife, dann wird mir nur eine der Dateien aber auch 6-mal angezeigt.
Besser kann ich es dir einfach nicht erklären, sorry :(
 
Zuletzt bearbeitet:
Zurück