Leer un archivo CSV y de texto con JSLTengo un archivo CSV que contiene nombres de parámetros y tolerancias. Tengo otro archivo de texto que contiene datos sin procesar. Estoy tratando de escribir un script en JSL para leer archivos CSV y de texto y luego aplicar los criterios de selección en el archivo CSV a los datos en el archivo de texto.
El formato de archivo CSV se encuentra a continuación:
# Tolerancia de parámetros
1 Altura 30
2 diámetro 50
El formato de archivo TXT es
ID Altura Diámetro
1AA 50 20
1BB 20 30
Quiero crear un archivo de texto con ID que falló los criterios de selección.
Por ejemplo, en el caso anterior, 1AA no pasa el control de altura porque el valor 50 es mayor que la tolerancia 30. Quiero un archivo de texto creado con 1AA escrito en él.
Cualquier orientación será muy apreciada.
Hasta ahora, solo sé cómo abrir un archivo CSV o de texto, pero no sé cómo guardar las tolerancias en una variable y aplicar la condición de detección a los datos.
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" )
);
Re: Leer un archivo CSV y de texto con JSLMuchas gracias. Su solución funciona perfectamente, tal como lo necesitaba. Estoy tratando de usarlo en un conjunto de datos más grande con más filas y columnas. Espero poder modificar rápidamente el script. Agradezco mucho su ayuda.
Re: Leer un archivo CSV y de texto con JSLEs tarde, pero esto es lo que se me ocurrió. Jim captó la parte sobre la salida de un archivo de texto, me lo perdí...
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>Re: Leer un archivo CSV y de texto con JSLAquí hay un script que funciona con sus datos de muestra y debería funcionar con sus tablas de datos más grandes.
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>