hmm... ich wollte schon sagen, daß Du keine genauen Angaben machst, aber ich stelle mit der zeit fest, daß Du anscheinend alle Angaben gemacht hast, die nötig sind, wenn auch teilweise etwas missverständlich.
Ist aber auch ganz schön verwirrend, finde ich.
Ich glaube (bis auf weiteres), es jetzt verstanden zu haben.
schau mal, ob's das jetzt ist, ersetze einfach die entsprechenden funktionen:
(In dem Fall, daß auf beiden Laufwerken genau die gleiche Datei existiert, werden beide in die outdatei geschrieben. Wenn das nicht gewünscht ist, muss das eben auch noch geklärt werden)
//-----------------------------
function checkIfInFileList( list, infile )
{
var i,temp;
var out = [];
for( i = 0; i < infile.length; i++ ) { out = out.concat( findInList( infile[i] ) ); }
return out;
function findInList( s )
{
var i = 0;
var out = [];
for( i = 0; i < list.length; i++ )
{
if( s == list[i].n.join("_").substr( 0, 14 ) ) out.push( list[i] );
}
if( out.length == 0 ) return [s];
return out;
}
};
//-----------------------------
function save( list )
{
var out = [];
for( var i = 0; i < list.length; i++ )
{
if( list[i].n )
{
out.push( list[i].n.join("") );
msg( i + " " + list[i].n + " - " + list[i].p );
}
else
{
out.push( "! datei nicht gefunden: '" + list[i] + "'" );
msg( i + " " + "! datei nicht gefunden '" + list[i] + "' !" );
}
}
saveFile( locations.outfile, out.join("\r\n") );
};
//-----------------------------
function getSortedList()
{
var out = new Array();
var locs = [ locations.posA, locations.posB ];
var temp, i, k;
for( i = 0; i < locs.length; i++ )
{
temp = getFiles( locs[i], 5, "txt" )[1];
for( k = 0; k < temp.length; k++ )
{
temp[k] = { p:temp[k].path, n:temp[k].name };
temp[k].p = temp[k].p.replace(/\\/g,"/");
temp[k].p = temp[k].p.substr( 0, temp[k].p.lastIndexOf("/") );
temp[k].n = temp[k].n.split(".")[0];
temp[k].n = [ temp[k].n.substr( 0, 14 ), temp[k].n.substr( 14 ) ];
out.push( temp[k] );
}
}
out.sort( sort );
out = findLast( out );
return out;
//__
function sort( a, b )
{
var i;
a = a.n;
b = b.n;
for( i = 0; i < a.length; i++ )
{
if( !b[i] ) return 1;
if( a[i].length > b[i].length ) return 1;
if( a[i].length < b[i].length ) return -1;
if( a[i] > b[i] ) return 1;
if( a[i] < b[i] ) return -1;
}
return 0;
};
//__
function findLast( arr )
{
var i = 0;
var out = new Array();
var temp = [];
var current000, last000;
var currentX, lastX;
var current00x, last00x;
for( i = 0; i < arr.length; i++ )
{
current000 = arr[i].n[0];
current00x = arr[i].n[1].split("_")[1];
currentX = arr[i].n[1].split("_")[0];
if( last000 != current000 )
{
out = out.concat( temp );
temp = [];
}
if( i > 0 && lastX != currentX ) { temp = []; }
temp.push( arr[ i ] );
last000 = current000;
lastX = currentX;
last00x = current00x;
}
return out;
};
};
Übrigens, Du schriebst:
aber sie muss wie gesagt so aussehen:
a123_45678_000_D_10k
a123_45678_000_D_10m
a123_45679_001_AB_10s
a123_45679_001_AB_20b
Das widerspricht dem, was Du vorher geschrieben hast, nämlich es solle '_001AB_' heissen statt '_001_AB_".
Ich nehme an, das war ein Irrtum, und Du bezogst Dich nur auf die '..._10k' usw., richtig ?
Es würde bei der Kommunikation etwas helfen, die Abschnitte des Dateinamens ( a123_45678 + AB + 10k ) irgendwie zu bezeichnen, zB. sowas wie Nummer, Kürzel, Version, Variante, Stand, Ausgabe, Vorgang, Thema, ...
a123_45678_000,D_10m - D:/save/OLUTEX
a123_45679_001,AB_20b - D:/save/OLUTEX
! datei nicht gefunden '' !
was ist das mit dem komma?und da steht wieder das mit der datei nicht gefunden?
Javascript erwartet für die Ausgabe einen String, und wenn es keinen bekommt, versucht es, das was es bekommt in einen String umzuwandeln.
Im Falle von Arrays tut es das, indem es einfach die Elemente des Arrays mit Kommas zu einem String verbindet.
Daher das Komma.
Das "datei nicht gefunden" sieht für mich immernoch korrekt aus, demnach würde eine Datei, die im Inputfile verzeichnet ist, nicht existieren.
Immerhin sollte der obige Code nun anzeigen, welche datei denn nicht gefunden wurde. Probier mal.
So, nu bin ich aber auch müde. Gut Nacht.