Ich habe> 600.000 jmp-Datentabellen in einem einzigen Ordner, und jede davon hat 12.000 Zeilen und die Dateigröße beträgt jeweils ~ 100 KB. Ich habe ohne Erfolg versucht, alle zusammen zu konkatisieren, aber es ist nicht überraschend, dass ich nur eine Datei mit ~ 15 Millionen Zeilen (ca. 1200 Dateien) erzeugen kann, bevor JMP kein Dampf mehr ist und nicht reagiert.
Ich habe dieses Skript verwendet, um die Operation auszuführen, die ich aus einer dieser Diskussionen kopiert habe (entschuldige mich, aber ich konnte das eigentliche Board nicht finden, kann also keine Verknüpfung herstellen). Ich könnte 1.000 Dateien in einzelne Ordner kopieren und dann concat, aber das wäre ziemlich langweilig.
mypath = Pick Directory( "Select a directory" );
Set Current Directory( mypath );
y = Files In Directory( mypath );
For( i = N Items( y ), i > 0, i--,
If( Ends With( y[i], "jmp" ),
,
Remove From( y, i )
)
);
n = N Items( y );
For( i = 1, i <= N Items( y ), i++,
sname = Left( y[i], Length( y[i] ) - 4 );
/* If the file is the first in the list, open it. Otherwise, open the table, concatenate with the main table, and close the table just opened. */
If( i == 1,
mainDt = Open( mypath || y[i] );
mainDt << New Column( "source", character, set each value( sname ) );
,
dt = Open( mypath || y[i], hidden, invisible );
dt << New Column( "source", character, set each value( sname ) );
mainDt = mainDt << Concatenate( dt, Append to First Table );
Close( dt, NoSave );
Wait( 0 );
);
);
/* Give the final table a name. */
mainDt << Set Name( mypath, "_Concatenated Files" );
dt << Save( mypath, "_Concatenated Files" );
Dieses Add-In funktioniert auch nicht https://community.jmp.com/t5/JMP-Add-Ins/Bulk-Concatenate-Add-in/ta-p/35435
Gibt es eine Möglichkeit, nur die ersten 1000 Dateien zu speichern, die verkettete Tabelle zu speichern, sie zu schließen und dann zum nächsten Satz von 1.000 zu wechseln? Ich habe ein paar Dinge ausprobiert, aber sie hören normalerweise nur auf, wenn der erste Satz abgeschlossen ist.
Grüße
David
Hier ist eine Änderung an Ihrem aktuellen Skript, die jetzt alle 1000 Dateien in einer verketteten Datei speichert. In dem neuen Skript habe ich auch einen Fehler korrigiert, bei dem Sie "mypath" einige Male nicht ordnungsgemäß mit der Zeichenfolge "_Concatenated Files" verketteten. Darüber hinaus wiesen Sie in Ihrer Save-Anweisung auf die falsche Datentabelle zum Speichern.
mypath = Pick Directory( "Select a directory" );
Set Current Directory( mypath );
y = Files In Directory( mypath );
For( i = N Items( y ), i > 0, i--,
If( Ends With( y[i], "jmp" ),
,
Remove From( y, i )
)
);
n = N Items( y );
counter=0;
For( i = 1, i <= N Items( y ), i++,
sname = Left( y[i], Length( y[i] ) - 4 );
/* If the file is the first in the list, open it. Otherwise, open the table, concatenate with the main table, and close the table just opened. */
If( counter == 0,
mainDt = Open( mypath || y[i] );
mainDt << New Column( "source", character, set each value( sname ) );
,
dt = Open( mypath || y[i], hidden, invisible );
dt << New Column( "source", character, set each value( sname ) );
mainDt = mainDt << Concatenate( dt, Append to First Table );
Close( dt, NoSave );
Wait( 0 );
);
counter = counter + 1;
If(mod(counter,1000) == 0,
mainDt << Set Name( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
mainDt << Save( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
counter = 0;
)
);
/* Give the final table a name. */
mainDt << Set Name( mypath || "_Concatenated_Files_" || char(i) || "_" || char(i+counter) );
mainDt << Save( mypath || "_Concatenated_Files_" || Char( i ) || "_" || Char( i + counter ));