Lesen Sie eine CSV- und Textdatei mit JSLIch habe eine CSV-Datei, die Parameternamen und Toleranzen enthält. Ich habe eine andere Textdatei, die Rohdaten enthält. Ich versuche, ein Skript in JSL zu schreiben, um sowohl CSV- als auch Textdateien zu lesen und dann die Überprüfungskriterien in der CSV-Datei auf die Daten in der Textdatei anzuwenden.
Das CSV-Dateiformat ist wie folgt:
# Parametertoleranz
1 Höhe 30
2 Durchmesser 50
TXT-Dateiformat ist
ID-Höhe-Durchmesser
1AA 50 20
1BB 20 30
Ich möchte eine Textdatei mit der ID erstellen, die die Überprüfungskriterien nicht erfüllt hat.
Im obigen Fall schlägt beispielsweise 1AA die Höhenprüfung fehl, da der Wert 50 größer als die Toleranz 30 ist. Ich möchte eine Textdatei erstellen, in der 1AA geschrieben ist.
Jede Anleitung wird sehr geschätzt.
Bisher weiß ich nur, wie man eine CSV- oder Textdatei öffnet, konnte aber nicht herausfinden, wie man Toleranzen in einer Variablen speichert und die Screening-Bedingung auf Daten anwendet.
txt_path = Pick File( "Pick a file" );
dt_screen = Open(
txt_path,
Column Names are on line( 1 ),
End of Field( "Comma" ),
Data Starts on Line( 2 ),
End Of Line( "CRLF" )
);
Betreff: Lesen Sie eine CSV- und Textdatei mit JSLVielen Dank. Ihre Lösung funktioniert perfekt, genau so, wie ich es brauchte. Ich versuche, es für einen größeren Datensatz mit mehr Zeilen und Spalten zu verwenden. Hoffentlich kann ich das Skript schnell ändern. Vielen Dank für Ihre Hilfe.
Betreff: Lesen Sie eine CSV- und Textdatei mit JSLEs ist spät, aber hier ist, was ich mir ausgedacht habe. Jim hat den Teil mit der Ausgabe einer Textdatei mitbekommen, das habe ich übersehen ...
csvfile = Save Text File("$temp/x.csv",
"# Parameter Tolerance
1 Height 30
2 Diameter 50
"
);
txtfile = Save Text File("$temp/y.txt",
"ID Height Diameter
1AA 50 20
1BB 20 30
1cc 20 90
"
);
dtparms = Open(csvfile,
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Spaces, Space, CSV( 0 ) ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 )
)
);
// get the parameters
parameterNames = dtparms[0, "parameter"]; // {"Height", "Diameter"}
parameterValues = dtparms[0, "tolerance"]; // [30, 50]
dtdata = Open(txtfile,
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Spaces, Space, CSV( 0 ) ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 )
)
);
For( iPname = 1, iPname <= N Items( parameterNames ), iPname += 1,
col = Column( parameterNames[iPname] ); // Column( "Diameter" )
val = parameterValues[iPname]; // 50
dtdata << selectwhere( dtdata:col > val, current selection( "extend" ) );
);
dtdata<<SELECT columns=""></SELECT>Betreff: Lesen Sie eine CSV- und Textdatei mit JSLHier ist ein Skript, das mit Ihren Beispieldaten funktioniert und mit Ihren größeren Datentabellen funktionieren sollte.
Names default to here(1);
// Open the data file
txt_path = Pick File( "Pick a Data File" );
dt_data = Open(
txt_path,
columns(
New Column( "ID", Character, "Nominal" ),
New Column( "Height", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Diamiter", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
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( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// Open the Tolerance data
txt_path = Pick File( "Pick a Tolerance File" );
dt_Tolerance = Open(
txt_path,
Worksheets( "Sheet1" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get the column names in the data file
colNames = dt_data << get column names(string,continuous);
// Loop across the columns and get the Tolerances and then go through all
// of the rows in the data table and select the ones that fail
For( theCol = 1, theCol <= N Items(colNames), theCol++,
theToleranceRow = dt_Tolerance << get rows where( colNames[theCol] == dt_Tolerance:Parameter);
If( N Rows( theToleranceRow ) >0,
// Change theToleranceRow from a matrix to a scaler value
theToleranceRow = theToleranceRow[1];
For(theRow = 1, theRow <= N Rows( dt_data ), theRow++,
If( column(dt_data,colNames[theCol])[theRow] > dt_Tolerance:Tolerance[theToleranceRow],
current data table(dt_data);
Row State( theRow ) = Selected State( 1 );
)
)
)
);
// Create the text string to save to the text file for all failing IDs
failedRows = dt_data<<GET selected="" rows=""> 0,
failedText = dt_data:ID[failedRows[1]];
For( selectedRow = 2, selectedRow <= N Rows(failedRows), selectedRow++,
failedText = failedText || "\!n" || dt_data:ID[failedRows[selectedRow]]
)
);
// Save the failed text string to a file
Save Text File( "path\to\failed.txt", failedText );</GET>