Aiuto w / parsing file .dat ambiguo? convertire unità, aggiungere etichette?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Quindi l'ingegnere precedente se n'è andato e sto esaminando alcuni dei suoi script che ha scritto per aiutarci con i file .dat. Ne ha uno che analizza e formatta i dati in una tabella dati, ma penso che sia necessario un po 'più di lavoro per essere più user friendly.
Il file .dat è un insieme di dati delimitato da tabulazioni con una quantità ambigua di misurazioni. Intendo dire che la quantità e l'etichetta per ogni misurazione nel file .dat variano da prodotto a prodotto. Come un set di file potrebbe avere da S1 a S5, altri potrebbero essere da S11 a S26, ecc. In sostanza, le etichette e la quantità di etichette cambiano con ciascun set di dati. Sembra che lo script precedente conti tutto questo.
Come dovrei regolarlo alla fine per poi convertire le unità e aggiungere "etichetta (mm)" nell'etichetta della colonna? Le misurazioni attuali sono tutte in mil (1/1000 pollici).
consigliare? Sono nuovo di .jsl e sto cercando di capire tutto questo.
Ho allegato alcune copie lavate di bianco se ciò aiuta.

Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Prima di tutto, non si dovrebbe mai ripetere il codice. Se hai intenzione di fare qualcosa più volte questo è un buon segnale per creare una funzione. Ho anche incluso uno snippit del codice di Ian per aiutarti anche con la cosa di Max.
Non ho eseguito il debug di questo prima di postare, ma questo dovrebbe funzionare bene per te.
// Crea funzione di conversione delle colonne
convertColumns = Funzione ({ PEMdata_all , Lettera , Unità , Conversione } ,
// Trova le colonne "X"
S_columns = {} ;
v = {} ;
per ( io = 1 , io <= ncols ( PEMdata_all ) , io ++,
colname = colonna ( PEMdata_all , io ) << Ottieni il nome ;
Se ( ! manca ( regex ( colname , Lettera || "*" )) ,
inserire ( S_columns , colname ) ;
v = v || colname << Ottieni valori ;
) ) ;
// Aggiungi colonna VMax
vmax = Trasporre ( VMax ( Trasporre ( v ))) ;
PEMdata_all << Nuova colonna ( Lettera || "Max" , Numerico , Continuo , Valori ( vmax )) ;
inserire ( S_columns , Lettera || "Max" ) ; // aggiungi la colonna massima in modo che converta anche
// Crea nuove colonne con conversioni
per ( io = 1 , io <= nitems ( S_columns ) , io ++,
newcol = PEMdata_all << Nuova colonna ( S_columns [ io ] || "(" || Unità || ")" , Numerico , Continuo ,
Formula ( Colonna ( PEMdata_all , S_columns [ io ]) [] * Conversione )) ;
// Opzionalmente elimina le colonne mil precedenti
newcol << Elimina la formula ;
PEMdata_all << Elimina colonne ( Colonna ( PEMdata_all , S_columns [ io ]) ) ;
) ;
) ;
// Esegui le colonne di interesse
Lettere = { "S" , "CY" } ;
Unità = "Pollici" ;
Conversione = 1000 ;
Per ( io = 1 , io <= nitems ( Lettere ) , io ++,
convertColumns ( PEMdata_all , Lettere [ io ] , Unità , Conversione ) ;
) ;
Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Ecco un esempio per darti alcune idee:
NamesDefaultToHere ( 1 ) ;
// Crea una tabella con circa 10 colonne
v = J ( 100 , 10 , CasualeNormale ()) ;
dt = astable ( v ) ;
// Crea una nuova colonna in dt che contenga il valore massimo delle sole colonne 4, 5 e 6
v = : Col4 << getValues ;
v = v || ( : Col5 << getValues ) ;
v = v || ( : col6 << getValues ) ;
vmax = Trasporre ( VMax ( Trasporre ( v ))) ;
dt << newColumn ( "Max di 3, 4 e 5" , Numerico , Continuo , Valori ( vmax )) ;
Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Grazie msharp,
Sì, tutti gli S vanno insieme, i CY, i T, i CFW, ecc. Ho appena finito di ripetere la struttura per ogni tipo. Forse non il più elegante, ma funziona.
Qualche consiglio su come aggiungere più colonne che calcolano il massimo di ogni gruppo? Come una nuova colonna per il massimo dei CY per ogni riga?
Da lì, potrei provare a programmarlo per far apparire una nuova finestra di riepilogo che mostra la misura nella Colonna 1 (CY, T, S, CFW), quindi il conteggio, la media, l'USL e il CPK, si spera.
Qualche consiglio?
Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Nel testo rosso sopra menzionato hai voluto solo le colonne S. Indovina che è stato un equivoco da parte mia.
Opzioni: supponendo che si desideri effettuare la stessa conversione, è possibile eseguire semplicemente tutte le colonne dopo le prime quattro colonne di etichette.
conv_columns = {} ;
per ( io = 5 , io <= ncols ( PEMdata_all ) , io ++,
nome = colonna (PEMdata_all, i) << Ottieni nome;
inserire (conv _columns , colname )
) ;
Oppure puoi cambiare la regex:
"CY. *" Sembra che funzionerebbe supponendo che tutte le colonne di interesse C inizino effettivamente con CY.
"\ w + \ d \ d" Corrisponde almeno a uno o più caratteri di parole seguiti immediatamente da almeno due caratteri numerici. Questo corrisponderebbe sia a "CY22" che a "S12", ad esempio, ma non a "Carrier"
Non entrerò troppo nel dettaglio ma ci sono molti modi per analizzare le stringhe. Le espressioni regolari sono un argomento che può e ha riempito molti libri. Detto questo, le nozioni di base possono essere apprese rapidamente e impiegare un'ora per guardare un video di YouTube o leggere la sezione Regex della Guida allo scripting JSL varrebbe la pena se si prevede di eseguire qualsiasi quantità di codice. Le espressioni regolari sono usate in molti linguaggi di programmazione, quindi la conoscenza è trasferibile.
Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Eccezionale! Funziona esattamente quello che stavo cercando. Ho aggiunto una sezione ripetuta per convertire le colonne "C". Saluti!!
Tuttavia, l'unico problema rimasto è che la sua raccolta di una delle altre colonne 'nome' (Carrier #). Quale sarebbe la riga di script cercare "C. *" ma escludere "Carrier #"?
Ri: Aiuto w / analisi del file .dat ambiguo? convertire unità, aggiungere etichette?Mentre il codice del tuo ex collega sembra buono, ha commentato male. Piuttosto che sprecare il mio tempo cercando di capirlo, ho solo aggiunto la funzionalità che stai cercando alla fine. Basta inserire il codice qui sotto fino alla fine.
È comunque un metodo di programmazione migliore dal momento che è sempre meglio tenere separate le programmazioni funzionali. Un codice da analizzare, un codice da convertire, ecc. Mantiene il codice pulito, più facile da eseguire il debug, refactoring, read, ect.
Questo codice (1) trova tutte le colonne che iniziano con "S"
(2) aggiunge una nuova colonna convertendo il precedente in pollici e allegando l'etichetta "(pollici)" (potrebbe facilmente cambiare per convertire in (mm).
(3) cancella le colonne mils. Puoi semplicemente rimuovere le ultime due righe di codice se vuoi mantenerle.
// Aggiunto porzione
// Trova le colonne S
S_columns = {} ;
per ( io = 1 , io <= ncols ( PEMdata_all ) , io ++,
colname = colonna ( PEMdata_all , io ) << Ottieni il nome ;
Se ( ! manca ( regex ( colname , "S.*" )) ,
inserire ( S_columns , colname )
)
) ;
// Crea nuove colonne con conversioni
per ( io = 1 , io <= nitems ( S_columns ) , io ++,
newcol = PEMdata_all << Nuova colonna ( S_columns [ io ] || "(pollici)" , Numerico , Continuo ,
Formula ( Colonna ( PEMdata_all , S_columns [ io ]) [] * 1000 ));
// Opzionalmente elimina le colonne mil precedenti
newcol << Elimina la formula ;
PEMdata_all << Elimina colonne ( Colonna ( PEMdata_all , S_columns [ io ]) ) ;
) ;