Gesammelte Werte in Array ablegen

Au backe - jetzt habe ich es gesehen! ich glaube ich muss Feierabend machen. *ich schmeiß mich weg!*
Danke @ComFreek - du hast mir die Augen aufgemacht :) jetzt läuft es. Sorry für den Umstand.
 
Also hier mal der Code für die, die ggf. ein ähnl. Problem haben, inkl. Datum einlesen für jede Datei. Danke nohmals @ComFreek für das "Augen öffnen" ;)

Eine Frage habe ich aber trotzdem noch. Momentan wird das Ganze alphabetisch geordnet, würde es aber so ordnen, dass das jüngste Datum zuerst kommt.
Mit ".sort()" habe ich es schon an einigen Stellen probiert, allerdings erfolglos. gibt es eine Idee dazu?

Javascript:
var projName = new Array(); //('Projektname')
var ProjDateRoh = null // ('Tue Oct 7 02:53:27 EDT 2008')
var ProjDate = null // für Umwandlung auf ('01.04.2014')
var arrayFileData = [];
    
//Alle Files erkennen 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;
    
    // Datum vom letzten Zugriff der Dateien abgreifen
    var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject");
    var ProjDateRaw = getProjDateRoh.GetFile("c:\\cnc\\USER\\" + ProjDateRoh);
    ProjDateRoh = ProjDateRaw.DateLastAccessed;
      // 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
  
    //Auflistung der Dateien
    arrayFileData.push({'name': projName.replace(/.jpg/, "") + ',', 'date': ProjDate + '  '}) //.replace entfernt Suffix

    // zurücksetzen
    getProjDateRoh = null
    fileAmount = null 
}

//Aufgelistete Dateien sortieren und in DIV ausgeben
files = arrayFileData

    insertDiv = function(wrapper, file){
        // neues Element erstellen
        var div = document.createElement('div'),
            content = "",
            _key

        for(_key in file){
            if(file.hasOwnProperty(_key)){
                content +=  " " + file[_key] + "";
            }
        }

        // neuen Element Inhalt zuweisen
        div.innerHTML = content;
        // CSS-Eigenschaften über das style-Objekt
        div.style.display = "inline-block";
        // CSSKlasse zuweisen
        div.className += " metroFileBoxAuto";
        wrapper.appendChild(div);
    };
 
Habe es jetzt so probiert, er sortiert was, aber irgendwie nicht richtig. Alphabetisch ist es jetzt nicht mehr allerdings sind sie jetzt so sortiert:
AtestY-08.07.14,
sendNP01.asp-07.07.14,
sendNP02.asp-23.06.14,
SendNP03.asp-23.06.14,
testx-07.07.14

der code:
Javascript:
//...passend zum obigen code
files = arrayFileData
// nach Datum sortieren
files.sort(function(a,b){
var c = new Date(a.date);
var d = new Date(b.date);
return d-c;
});

    insertDiv = function(wrapper, file){....

ich könnte mir vorstellen, weil im Datapaket "arrayFileData" Dateiname und Datum enthalten ist, dass die Sortierung doch nicht nur nach Datum ist sondern ggf. auch mit den enthaltenen Wörtern. müsste man doch irgendwie abstellen. Versucht habe ich auch:

Javascript:
(function(){
  if (typeof Object.defineProperty === 'function'){
    try{Object.defineProperty(Array.prototype,'sortBy',{value:sb}); }catch(e){}
  }
  if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;

  function sb(f){
    for (var i=this.length;i;){
      var o = this[--i];
      this[i] = [].concat(f.call(o,o,i),o);
    }
    this.sort(function(a,b){
      for (var i=0,len=a.length;i<len;++i){
        if (a[i]!=b[i]) return a[i]<b[i]?-1:1;
      }
      return 0;
    });
    for (var i=this.length;i;){
      this[--i]=this[i][this[i].length-1];
    }
    return this;
  }
})();

files.sortBy(function(o){ return o.date });

Dabei war die Auflistung dann etwas besser, aber dennoch nicht korrekt:
sendNP01.asp-07.07.14,
testx-07.07.14
AtestY-08.07.14,
sendNP02.asp-23.06.14,
SendNP03.asp-23.06.14,
 
Zuletzt bearbeitet:
Also zuerst hole ich das Datum mit fso der Datei (zuletzt zugegriffen), dann wandle ich ihm um und lege dieses dann in projDate ab.
Hier im Code steht alles beschrieben.
Javascript:
var ProjDateRoh = null // ('Tue Oct 7 02:53:27 EDT 2008')
var ProjDate = null // für Umwandlung auf ('01.04.2014')
var arrayFileData = [];

//Alle Files erkennen 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;

    // Datum vom letzten Zugriff der Dateien abgreifen
    var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject");
    var ProjDateRaw = getProjDateRoh.GetFile("c:\\cnc\\USER\\" + ProjDateRoh);
    ProjDateRoh = ProjDateRaw.DateLastAccessed;
      // 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
...

projName und ProjDate werden dann zusammen, wie du ja vom vorherigen Fall schon kennst zusammen verwende
 
Wieso baust du dein Datum um?
Du solltest es beim Ausgeben umbauen / formatieren, nicht beim Anlegen der eigentlichen Datenstruktur. Denn nun hast du das Problem, dass du nur mit Aufwand zur vorherigen Repräsentation kommst und so dein Array sortieren kannst!

Was für ein Datentyp ist "DateLastAccessed"? MSDN nennt leider keinen: http://msdn.microsoft.com/en-us/library/6zc3f20t(v=vs.84).aspx

Wenn du dein Skript nicht umbauen möchtest, dann kannst du auch ein weiteres Attribut (etwa "rawLastAccessedDate") in dein Array einbauen.
 
Umbauen ungern, wie soll ich das anstellen mit
rawLastAccessedDate?

Das DateLastaccessed ist ein Befehl für das fso. Oder ich baue nicht um, bis ich sortiert habe. Ich probiere das mal aus...
 
So:
Javascript:
arrayFileData.push({
  'name': projName.replace(/.jpg/, "") + ',',
  'date': ProjDate + '&nbsp; ',
  projDateRoh: projDateRoh
});
Wieso hast du eigentlich Single Quotes um deine Schlüssel? Du kannst die weglassen (siehe projDateRoh im obigen Code).

Das DateLastaccessed ist ein Befehl für das fso.
Ich hatte nach dem Datentyp gefragt.
 
ok, es scheint mit der Sortierung zu funktionieren, wenn ich das sortieren von ProjDateRoh aus mache, doch zum schluss möchte ich schon wieder das datum in 01.02.14 umbauen. aber ich finde nicht raus wo und ab wann...

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;
     
    // Datum vom letzten Zugriff der Dateien
    var getProjDateRoh = new ActiveXObject("Scripting.FileSystemObject"); 
    var ProjDateRaw = getProjDateRoh.GetFile("c:\\cnc\\USER\\" + ProjDateRoh);
    ProjDateRoh = ProjDateRaw.DateLastAccessed;// gibt 'Tue Oct 7 02:53:27 EDT 2008' aus
   
    //Auflistung der Dateien
    arrayFileData.push({'name': projName.replace(/.cm5/, "") + ',', 'date': ProjDateRoh + '&nbsp; '})
    //vom Speicher zurücksetzen
    getProjDateRoh = null
    fileAmount = null
   
}

// Sortieren, letzter zugriff zu beginn
(function(){
  if (typeof Object.defineProperty === 'function'){
    try{Object.defineProperty(Array.prototype,'sortBy',{value:sb}); }catch(e){}
  }
  if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;

  function sb(f){
    for (var i=this.length;i;){
      var o = this[--i];
      this[i] = [].concat(f.call(o,o,i),o);
    }
    this.sort(function(a,b){
      for (var i=0,len=a.length;i<len;++i){
        if (a[i]!=b[i]) return a[i]<b[i]?-1:1;
      }
      return 0;
    });
    for (var i=this.length;i;){
      this[--i]=this[i][this[i].length-1];
    }
    return this;
  }
})();


arrayFileData.sortBy(function(o){ return o.date });

//hier Datum wieder umbauen auf 01.02.14  aber scheint nicht zu klappen
//Aufgelistete Dateien sortieren und in DIV ausgeben
files = arrayFileData

    insertDiv = function(wrapper, file){
        ....
 

Neue Beiträge

Zurück