Ich versuche, eine Reihe von Protokolldateien in einer einzigen Datei zu verketten und verwende Version 13 ...JMP 14 ist viel einfacher... Da andere noch einige Zeit mit JMP 13 arbeiten werden, muss ich ein generisches Skript erstellen.
Das Skript, das ich derzeit habe, kann eine Reihe offener Datentabellen generieren. Das funktioniert gut.Ich kann eine Liste der openDTs iterieren und erfassen.
Aber wenn ich versuche zu verketten, war ich nicht erfolgreich. Ich muss die Tabellen nicht einmal öffnen, sondern nur, um sie in einer einzigen Datei zu verketten.
Kann mir da draußen jemand helfen, dieses Problem zu verstehen?
_____________________________________________________
Ich habe die Verkettungsfunktion für eines der geöffneten Protokolle ausgeführt und Folgendes generiert:
Data Table( "test_data_1.log" ) << Concatenate(
Data Table( "test_data_2.log" ),
Data Table( "test_data_3.log" ),
Output Table( "RESULTS" ),
Create source column
);
___________________________________________________
names = {"/C:/1test/test_data_1.log", "/C:/1test/test_data_2.log", "/C:/1test/test_data_3.log"};
openDTs = {DataTable("test_data_3.log"), DataTable("test_data_2.log"), DataTable("test_data_1.log")};
Name ungelöst: Ergebnisse beim Zugriff oder bei der Auswertung von „Ergebnisse“, Ergebnisse/*###*/
Im folgenden Skript ist der Fehler mit /*###*/ markiert.
dirpath = Munger( Pick Directory( "JMP 13.xx locate the LOG FILES: " ), 1, "/", "" );
Set Current Directory( dirpath );
names = Files In Directory( dirpath, recursive( 1 ) );
For( i = 1, i <= N Items( names ), i++,
dt1 = Open(
names[i] = Convert File Path( dirpath ) || names[i],
columns(
Column( "STARTDATETIME", Numeric, "Continuous", Format( "y/m/d h:m:s", 26, 3 ), Input Format( "y/m/d h:m:s", 3 ) ),
Column( "FIVER", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "CLASS", Character, "Nominal" ),
Column( "BLANK", Character( 1 ), "Nominal" ),
Column( "TYPE", Character, "Nominal" ),
Column( "CSTARGET", Character, "Nominal" ),
Column( "CSACTION", Character, "Nominal" ),
Column( "NUMCODE", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "DEVICE", Character, "Nominal" ),
Column( "DATA", Character, "Nominal" ),
Column( "ENDDATE", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK1", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Other( "0x7c" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
Current Data Table( dt1 );
dt1 << delete columns( "CLASS", "FIVER", "BLANK", "JUNK1", "JUNK2" );
dt1 << Select Where(
Contains( As Column( dt1, "TYPE" ), "Execute" ) | Contains( As Column( dt1, "TYPE" ), "++" ) | Contains(
As Column( dt1, "TYPE" ),
"SetState"
) | Contains( As Column( dt1, "TYPE" ), "SAM" ) | Contains( As Column( dt1, "TYPE" ), "DAC" )
);
dt1 << Delete Rows;
);
Show( names );
openDTs = {};
For( i = 1, i <= N Table(), i++,
Insert Into( openDTs, Data Table( i ) )
);
Show( openDTs );
dt = New Table( "Results" );
For( k = 1, k <= N Items( names ), k++,
Current Data Table( Results/*###*/ );
dt << concatenate( Data Table( names[k] ), Output Table( "Results" ), Create Source column );
);Jim – Vielen Dank ... habe eine Überarbeitung durchgeführt ... ohne die Daten in Spalten zu analysieren, öffne ich die Dateien und füge dann eine Quellspalte hinzu. Dann verketten. Nehmen Sie dann die verkettete Datei und analysieren Sie sie. Es ist ein schnellerer und logischerer Fortschritt. Folgendes hinzugefügt:
// create the variables to set the column name and
// define the column value
cName = "SOURCE";
fName = dt1 << get name;
dt1 << New Column( cName, Character, Nominal, Set each value( fName ) );
Then iterate the open tables:
// define a list of open data tables.
openDTs = List();
For( i = 1, i <= N Table(), i++,
Insert Into( openDTs, Data Table( i ) )
);
// Loop through the data tables again and concatenate
For( k = 2, k <= N Items( openDTs ), k++,
Current Data Table();
dtUpdated = Current Data Table() << Concatenate( openDTs[k] );
Close( openDTs[k], nosave );
);
Es funktioniert jetzt gut.
Ihre Funktion Current Data Table() muss in geändert werden
Current Data Table( dt );
oder zu
Current Data Table( data table( "Results" ) );
Normalerweise führe ich die Verkettung jedoch durch, wenn jede Datei eingelesen wird.Für mich scheint es sauberer zu sein
Names default to here(1);
dirpath = Munger( Pick Directory( "JMP 13.xx locate the LOG FILES: " ), 1, "/", "" );
Set Current Directory( dirpath );
names = Files In Directory( dirpath, recursive( 1 ) );
dt = New Table( "Results" );
For( i = 1, i <= N Items( names ), i++,
dt1 = Open(
names[i] = Convert File Path( dirpath ) || names[i],
columns(
Column( "STARTDATETIME", Numeric, "Continuous", Format( "y/m/d h:m:s", 26, 3 ), Input Format( "y/m/d h:m:s", 3 ) ),
Column( "FIVER", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "CLASS", Character, "Nominal" ),
Column( "BLANK", Character( 1 ), "Nominal" ),
Column( "TYPE", Character, "Nominal" ),
Column( "CSTARGET", Character, "Nominal" ),
Column( "CSACTION", Character, "Nominal" ),
Column( "NUMCODE", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "DEVICE", Character, "Nominal" ),
Column( "DATA", Character, "Nominal" ),
Column( "ENDDATE", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK1", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Other( "0x7c" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
Current Data Table( dt1 );
dt1 << delete columns( "CLASS", "FIVER", "BLANK", "JUNK1", "JUNK2" );
dt1 << Select Where(
Contains( As Column( dt1, "TYPE" ), "Execute" ) | Contains( As Column( dt1, "TYPE" ), "++" ) | Contains(
As Column( dt1, "TYPE" ),
"SetState"
) | Contains( As Column( dt1, "TYPE" ), "SAM" ) | Contains( As Column( dt1, "TYPE" ), "DAC" )
);
dt1 << Delete Rows;
dt1 << rerun formulas; // make sure all dt1 operations are complete
// Concatenate to the Results data table
dt << concatenate( dt1, Append to first table( 1 ), Create Source Column );
// To keep the work environment clean, I normally delete the latest input data table
close( dt1, nosave );
);