Importa i valori xey dal file di testo nella tabella jmpCIAO,
Leggere ogni riga nel file di testo e importare ciascuna stringa come riga separata nella tabella dati jmp
Modellazione statistica avanzataAccesso ai datiPersonalizzazione di massaRi: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferGrazie Jarmo.
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferEcco un esempio completo che utilizza l'array associativo per memorizzare informazioni sul wafer e crea la tabella jmp dal file di testo.
Visualizza altro...
Ho anche notato che sembra che JMP non si comporti correttamente con le etichette dei valori quando "." è uno dei valori che viene etichettato. Segnalerò questo come bug quando avrò tempo
Visualizza altro...
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(4),
New Column("Column 1",
Character,
"Nominal",
Value Labels({"." = "MISSING", "A" = "AAA", "B" = "BBB", "C" = "CCC"}),
Use Value Labels(1),
Set Selected,
Set Values({"A", "B", ".", "C"})
)
);
Nomi predefiniti qui(1); dt = Nuova tabella ("Senza titolo", Aggiungi righe (4), Nuova colonna ("Colonna 1", Carattere, "Nominale", Etichette valori ({"." = "MANCANTE", "A" = "AAA", " B" = "BBB", "C" = "CCC"}), Usa etichette valori(1), Imposta selezionati, Imposta valori({"A", "B", ".", "C"}) ) ) ;
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferAncora una volta, ricorda di utilizzare l'indice di scripting e la guida di jmp. Di solito sono le migliori risorse per apprendere questo tipo di scripting JMP
Names Default To Here(1);
example_str = "\[
WAFER_MAP = {
WAFER_ID = "ABC"
A B C = 123
]\";
example_list = Words(example_str, "\!N");
Show(example_list);
Remove From(example_list, 1); // drop first index. Why it is fine in this case?
// loop over lines until "MAP = {" I'll just use hardcoded index for example
// I'll also save values to variables
// but associative array would be better in this case
wafer_id_line = example_list[1];
Show(wafer_id_line);
wafer_id = Word(2, wafer_id_line, "="); // you might have to remove extra quotes
show(wafer_id);
example_aa = Associative Array();
//adding values to associative array could be done with something like
example_aa["WAFER_ID"] = Word(2, wafer_id_line, "="); // you might have to remove extra quotes
show(example_aa);
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferGrazie Jamo @jthi per avermi fatto capire cosa mi stavo perdendo. Sapevo di essere vicino. Puoi condividere un codice di esempio solo così posso fare riferimento? Sto ancora imparando a suonare con gli archi
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferCambierei metodo se vuoi anche le altre informazioni. Dato che i dati nel file hanno nuovi dati su ogni riga (ad eccezione di wafermap), utilizzerei Words() e dividerei al cambio di riga (puoi comunque cercare quando si avvia wafermap utilizzando Contiene dall'elenco che Words() produce, ma non è l'indice in una lista, non in una stringa). Quindi aggiungerei le informazioni all'array associativo per facilitarne l'accesso (questo richiederà alcuni cicli e un maggiore utilizzo di Words()))
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferSpero tu stia bene @jthi ,!
Domanda davvero veloce su questa discussione-
Vorrei anche importare tutte le stringhe dal file txt nella tabella dati jmp comprese le informazioni sull'intestazione. La tabella dati finale dovrebbe contenere tutte le stringhe e ogni carattere dovrebbe essere trattato come una parola separata. Dovrebbe sembrare come questo.

La logica che hai suggerito non funziona dopo la riga 13. Qualsiasi aiuto sarebbe molto apprezzato
map_str =
"\[
WAFER_MAP = {
WAFER_ID = ""
BIN G = "Passing"
MAP = {
.....GGG.....
....BGGGG....
...BGGGGGG...
..GGGGGGGGG..
.GGGGGGBBGGG.
GGGGGGGBBGGGB
GGGGGGGGGGGGB
GGGGGGGGGGGGB
.GGGGGGGGGGG.
..GGGGGGGGG..
...GGGGGGG...
....GGGGG....
.....GGG.....
}
}
]\";
l = Words( map_str, "\!N" );
rowc = N Items( l );
colc = N Items( Words( l[1], "" ) );
dt = New Table( "Summary Bins",
Add Rows( rowc * colc ),
New Column( "X coord", Numeric, Ordinal ),
New Column( "Y coord", Numeric, Ordinal ),
New Column( "Bins", Character, Nominal, Label( 1 ) )
);
Try(
For Each( {line, idx}, l,
cur_rows = ((idx - 1) * colc :: (idx * colc - 1)) + 1;
dt[cur_rows, "X coord"] = ((1 :: colc))`;
;
dt[cur_rows, "Y coord"] = (J( 1, colc ) * (idx))`;
dt[cur_rows, "Bins"] = Words( line, "" );
)
);Grazie per il tuo tempo!
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferPuoi usare Contiene per saltare prima "MAP = {" o cercare dalla fine (leggi l'indice degli script...)

Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa wafer@jthi
Ci sono due stringhe contenenti " MAPPA = {" evidenziato di seguito:

Ho provato a utilizzare l'istruzione & per non selezionare il primo ma non funziona.
demo_str = Load text file("New wafer map.txt");
a = Contains(demo_str,"MAP = {") & Contains(demo_str,"WAFER_MAP = {") ==0; // get the location of the string "MAP ={"
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferPotresti provare Contiene con "MAP = {". Questo dovrebbe darti la posizione di "MAP = {" nella stringa e quindi utilizzare quella conoscenza con Substr per ottenere ciò che desideri. Controlla anche l'indice di scripting (e possibilmente la Guida di JMP che puoi aprire da Scripting Index) per capire come funzionano Substr (e altre funzioni).
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferPotresti provare Contiene con "MAP = {". Questo dovrebbe darti la posizione di "MAP = {" nella stringa e quindi utilizzare quella conoscenza con Substr per ottenere ciò che desideri
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa wafer@txnelson ,
Il tuo approccio funziona se il modello nella prima riga corrisponde all'istruzione contiene. Ho diverse mappe wafer che non avranno gli stessi schemi. L'unica somiglianza è che il modello del wafer inizia alla riga numero 21 nel file di testo. C'è un modo per definire il numero di riga in cui inizierà la lettura dello script? Ho allegato un file di testo della mappa wafer come riferimento (visualizzazione migliore sul blocco note ++)
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa wafermap_str = Substr(
demo_str,
Contains( demo_str, ".X." ),
Length( demo_str ) - Contains( demo_str, ".X." ) -1
);
Nota: cercare nell'indice degli script la definizione e gli esempi della funzione Stbstr()
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferQuesta è una buona spiegazione @jthi .
Domanda veloce:
L'istruzione seguente inizierà a leggere i dati dalla seconda riga dell'elenco. Non voglio leggere l'ultima riga che contiene le parentesi graffe "}".
Come posso definire la riga finale nello script
map_str = Substr(demo_str, Contains(demo_str, ".X."));
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferDevi manipolare la stringa che ottieni da Load Text File() in modo tale da ottenere una stringa che contiene solo la parte wafermap del file di testo. Questo non fornirà la stringa finale necessaria ma dà un'idea di cosa potresti fare. Vedere Indice di scripting (e Guida di JMP) per informazioni sul funzionamento di Substr e Contiene. Ha anche un'opzione sull'utilizzo di Parole e Contiene, che necessita anche di alcune modifiche per ottenere l'elenco corretto.
Names Default To Here(1);
demo_str = "SOMETHING
TEXT
EXAMPLE
MAP = {
.X.
XXX
.X.
}";
map_str = Substr(demo_str, Contains(demo_str, "MAP = {"));
show(map_str);
stop();
demo_list = Words(demo_str, "\!N");
map_start = Contains(demo_list, "MAP = {");
map_list = demo_list[map_start::N Items(demo_list)];
show(map_list);
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferScusa se ti disturbo di nuovo. Ho provato substr ma c'è qualcosa che non va nel codice. Se potessi modificare, sarebbe fantastico
map_str = Load Text File();
l = Words( map_str, "\!N" );
rowc = N Items( l );
colc = N Items( Words( l[21], "" ) ); //// edits
dt = New Table( "Untitled",
Add Rows( rowc * colc ),
New Column( "X", Numeric, Continuous ),
New Column( "Y", Numeric, Continuous ),
New Column( "bin", Character, Nominal, Label( 1 ) )
);
For Each( {line, idx}, l,
cur_rows = ((idx - 1) * colc :: (idx * colc - 1)) + 1;
dt[cur_rows, "X"] = ((1 :: colc))`;
dt[cur_rows, "Y"] = (J( 1, colc ) * (idx))`;
dt[cur_rows, "bin"] = substr( line, 1 );
);
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferDovresti usare qualche metodo per ottenere solo il wafermap (se ti interessa solo questo). Attualmente stai utilizzando l'intero file di testo. Alcune opzioni per questo sono
- Regex
- Sottostr con contiene
- Parole e dividi su {}
- Le parole e la divisione sulla riga cambiano e le combinano con Contiene in
- linee di hard coding e ottenere wafermap basato su quelle (di solito una pessima idea)
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa wafer@jthi
Solo una domanda veloce
Il file di testo vero e proprio contiene all'inizio le informazioni sul wafer. Voglio memorizzare i dati dalla riga 21. Ho modificato jsl come di seguito. Si legge come previsto. Eventuali suggerimenti?

map_str = Load Text File();
l = Words( map_str, "\!N" );
rowc = N Items( l );
colc = N Items( Words( l[21], "" ) ); //// edits
dt = New Table( "Untitled",
Add Rows( rowc * colc ),
New Column( "X", Numeric, Continuous ),
New Column( "Y", Numeric, Continuous ),
New Column( "bin", Character, Nominal, Label( 1 ) )
);
For Each( {line, idx}, l,
cur_rows = ((idx - 1) * colc :: (idx * colc - 1)) + 1;
dt[cur_rows, "X"] = ((1 :: colc))`;
dt[cur_rows, "Y"] = (J( 1, colc ) * (idx))`;
dt[cur_rows, "bin"] = Words( line, "" );
);
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferÈ un capolavoro. Grazie mille! :ghigna_faccia:
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferUtilizzando una tabella più semplice
Names Default To Here(1);
// Simple example table
dt = New Table(
"Untitled",
Add Rows(9),
New Column("X", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 1, 2, 3, 1, 2, 3])),
New Column("Y", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 2, 3, 3, 3])),
New Column("bin", Character, "Nominal", Set Values({".", "X", ".", "X", "X", "X", ".", "X", "."}))
);
//empty string initialization
str = "";
// get unique values for Y
// I will use Associative array instead of Summarize to keep correct format of values
// Summarize would change them to strings
y_uniq = Associative Array(:Y) << get keys;
For Each({cur_y}, y_uniq,
cur_line_rows = Loc(dt[0, "Y"], cur_y); // Loc() with datatable subscripting
line_bins = dt[cur_line_rows, "bin"]; // more datatable subscripting
bin_str = Concat Items(line_bins, "");
str = str || bin_str || "\!N";
);
// remove extra whitespace
str = Trim Whitespace(str);
Write(str);


Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferApprezzato @jthi
Sono nuovo nella codifica JSL. Puoi condividere un esempio? Proprio come riferimento
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferInizializza la stringa vuota, esegui il ciclo sui valori Y delle tabelle in ordine, ottieni i numeri di riga per y corrente, usa quei numeri di riga per ottenere contenitori, aggiungi quei contenitori alla stringa inizializzata (Concat Items() dovrebbe aiutare in questo), aggiungi il cambio di riga e continua al prossimo Y. Dopo il loop, ritaglia gli spazi bianchi, se necessario.
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferFunziona a meraviglia. Molte grazie @jthi ,
Sto cercando di importare le parole dal file di testo nella tabella dati jmp, quindi assegnare lettere diverse a quei contenitori nella tabella jmp e quindi riconvertirle in file di testo con la formattazione originale
map_str =
".....GGG.....
....BGGGG....
...BGGGGGG...
..GGGGGGGGG..
.GGGGGGBBGGG.
GGGGGGGBBGGGB
GGGGGGGGGGGGB
GGGGGGGGGGGGB
.GGGGGGGGGGG.
..GGGGGGGGG..
...GGGGGGG...
....GGGGG....
.....GGG.....";
Come posso riconvertire la tabella dati X, Y e i contenitori nel formato file di testo mantenendo la formattazione. Qualche suggerimento?
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferNon posso condividere il codice che utilizzo, ma ecco un rapido esempio con alcune idee
Names Default To Here(1);
// load text file
// parse interesting things
// get map to string
map_str =
".....GGG.....
....BGGGG....
...BGGGGGG...
..GGGGGGGGG..
.GGGGGGBBGGG.
GGGGGGGBBGGGB
GGGGGGGGGGGGB
GGGGGGGGGGGGB
.GGGGGGGGGGG.
..GGGGGGGGG..
...GGGGGGG...
....GGGGG....
.....GGG.....";
l = Words(map_str, "\!N");
rowc = N Items(l);
colc = N Items(Words(l[1], ""));
dt = New Table("Untitled",
Add Rows(rowc * colc),
New Column("X", Numeric, Continuous),
New Column("Y", Numeric, Continuous),
New Column("bin", Character, Nominal, Label(1))
);
For Each({line, idx}, l,
cur_rows = ((idx - 1) * colc::(idx * colc - 1)) + 1;
dt[cur_rows, "X"] = ((1::colc))`;
dt[cur_rows, "Y"] = (J(1, colc) * (idx))`;
dt[cur_rows, "bin"] = Words(line, "");
);
nw = New Window("test",
H List Box(
align("center"),
Text Box(map_str, <<SET font="" name=""></SET>

Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa wafer@jthi
Voglio memorizzare la posizione del dado e le lettere nelle colonne X e Y della tabella dati jmp dal file di testo allegato. H come utilizzare JSL per elaborare tale file txt come dati tabulari?

Tabella JMP:

Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferGrazie @jthi
Ti dispiacerebbe condividere il codice solo così posso fare riferimento?
Grazie,
Jack
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferHo formattato un paio di diversi tipi di wafermaps con JMP in coordinate XY (e file di mappa) basati su file di testo. Facendolo tramite script "manualmente", penso che il processo sia stato qualcosa del genere:
- Analizza il file di testo e ottieni informazioni importanti (Regex, Parole e altre funzioni di carattere sono utili qui)
- Conteggio righe, conteggio colonne
- Taglia X, taglia Y
- Tipi di contenitori (in particolare tipo null/vuoto)
- Wafermap
- Eventuali altre informazioni (ID WAFER, tipo...)
- Crea una nuova tabella dati in cui puoi raccogliere i risultati
- Il conteggio delle righe è molto probabilmente il conteggio delle righe * il conteggio delle colonne
- Sono necessarie almeno le colonne X e Y e, se sei interessato a contenitori diversi, aggiungi anche una colonna per quello
- Esegui il ciclo sulla stringa wafermap utilizzando Words(wafermap_txt, "\!N") per ottenere ogni riga e creare i valori moltiplicando xsize/ysize a seconda della colonna che stai riempiendo.
- Questo passaggio è molto più semplice se non ti interessano le larghezze e le altezze e puoi semplicemente utilizzare 1 / valore fisso
- Potrebbe anche essere una buona idea codificarli semplicemente come coordinate di cui avrebbero bisogno i file di mappa JMP, questo consente di creare file di forma della mappa utilizzando le dimensioni.
- Se sei interessato solo alla wafermap potresti tralasciare i contenitori nulli ma devi tenerne conto quando costruisci la mappa e
Ri: Importa i valori xey dal file di testo nella tabella jmp e crea una mappa waferCerca wafermaps nel componente aggiuntivo jmp e nelle discussioni precedenti. Ci sono molte risposte lì