Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Der vorherige Ingenieur ist also gegangen und ich schaue mir einige seiner Skripte an, die er geschrieben hat, um uns bei .dat-Dateien zu helfen. Er hat eine, die Daten in eine Datentabelle analysiert und formatiert, aber ich denke, es braucht etwas mehr Arbeit, um benutzerfreundlicher zu sein.
Die DAT-Datei ist ein tabulatorgesteuerter Datensatz mit einer ambitionierten Anzahl von Messungen. Ich meine, dass sich Menge und Bezeichnung für jede Messung in .dat von Produkt zu Produkt ändern. So wie eine Gruppe von Dateien S1 bis S5 haben könnte, könnte es sich bei S11 bis S26 um andere handeln. Grundsätzlich ändern sich die Beschriftungen und die Anzahl der Beschriftungen mit jedem Datensatz. Es sieht aus wie das vorherige Skript für all dies.
Wie würde ich es am Ende anpassen, um die Einheiten zu konvertieren und "label (mm)" in das Spaltenlabel einzufügen? Die aktuellen Messungen sind in Millimetern (1/1000 Zoll) angegeben.
beraten? Ich bin neu bei .jsl und versuche, das alles herauszufinden.
Ich habe einige weiße gewaschene Exemplare angehängt, wenn das hilft.

Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?Zunächst einmal sollte man niemals Code wiederholen. Wenn Sie etwas mehrmals ausführen, ist dies ein gutes Signal, um eine Funktion zu erstellen. Ich habe auch einen Ausschnitt aus Ians Code beigefügt, um Ihnen bei der Sache mit Max zu helfen.
Ich habe dieses Problem vor dem Posten nicht debuggt, aber das sollte für Sie gut funktionieren.
// Spaltenumwandlungsfunktion erstellen
convertColumns = Funktion ({ PEMdata_all . Brief . Einheit . Umwandlung } .
// Finde "X" -Spalten
S_spalten = {} ;
v = {} ;
zum ( ich = 1 . ich <= ncols ( PEMdata_all ) . ich ++
Colname = Säule ( PEMdata_all . ich ) << Name abrufen ;
Ob ( ! wird vermisst ( Regex ( Colname . Brief || ". *" )) .
einfügen in ( S_spalten . Colname ) ;
v = v || Colname << Werte erhalten ;
) ) ;
// VMax-Spalte hinzufügen
vMax = Transponieren ( VMax ( Transponieren ( v ))) ;
PEMdata_all << Neue Spalte ( Brief || "Max" . Numerisch . Kontinuierlich . Werte ( vMax )) ;
einfügen in ( S_spalten . Brief || "Max" ) ; // Maximale Spalte hinzufügen, damit auch konvertiert wird
// Neue Spalten mit Konvertierungen erstellen
zum ( ich = 1 . ich <= Nitems ( S_spalten ) . ich ++
newcol = PEMdata_all << Neue Spalte ( S_spalten [ ich ] || "(" || Einheit || ") . Numerisch . Kontinuierlich .
Formel ( Säule ( PEMdata_all . S_spalten [ ich ]) [] * Umwandlung )) ;
// Löschen Sie optional vorherige Mils-Spalten
newcol << Formel löschen ;
PEMdata_all << Spalten löschen ( Säule ( PEMdata_all . S_spalten [ ich ]) ) ;
) ;
) ;
// Durchlaufen Sie interessierende Spalten
Briefe = { "S" . "CY" } ;
Einheit = "Zoll" ;
Umwandlung = 1000 ;
Zum ( ich = 1 . ich <= Nitems ( Briefe ) . ich ++
convertColumns ( PEMdata_all . Briefe [ ich ] . Einheit . Umwandlung ) ;
) ;
Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?Hier ein Beispiel, um Ihnen einige Ideen zu geben:
NamesDefaultToHere ( 1 ) ;
// Eine Tabelle mit etwa 10 Spalten erstellen
v = J ( 100 . 10 . RandomNormal ()) ;
dt = AsTable ( v ) ;
// Erstellen Sie eine neue Spalte in dt, die nur den Maximalwert der Spalten 4, 5 und 6 enthält
v = : Col4 << getValues ;
v = v || ( : Col5 << getValues ) ;
v = v || ( : Col6 << getValues ) ;
vMax = Transponieren ( VMax ( Transponieren ( v ))) ;
dt << NewColumn ( "Max von 3, 4 und 5" . Numerisch . Kontinuierlich . Werte ( vMax )) ;
Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?Danke, msharp,
Ja, alle S gehen zusammen, CY, T, CFW usw. Ich habe gerade die Struktur für jeden Typ wiederholt. Vielleicht nicht das eleganteste, aber es funktioniert.
Irgendwelche Tipps, wie Sie dann weitere Spalten hinzufügen, die das Maximum jeder Gruppe berechnen? Wie eine neue Spalte für das Maximum der CYs für jede Zeile?
Von dort aus könnte ich versuchen, das Programm so zu programmieren, dass ein neues Übersichtsfenster mit der Messung in Spalte 1 (CY, T, S, CFW) und dann der Zähler, der Mittelwert, der USL und der CPK angezeigt werden.
Irgendwelche Tipps?
Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?In dem oben genannten roten Text wollten Sie nur die S-Spalten. Ich denke, das war ein Missverständnis von meiner Seite.
Optionen: Angenommen, Sie möchten die gleiche Konvertierung durchführen, können Sie nach den ersten vier Beschriftungsspalten einfach alle Spalten durchlaufen.
conv_columns = {} ;
zum ( ich = 5 . ich <= ncols ( PEMdata_all ) . ich ++
colname = column (PEMdata_all, i) << Get Name;
einfügen in (konv _Säulen . Colname )
) ;
Oder Sie könnten die Regex ändern:
"CY. *" Sieht so aus, als würde es funktionieren, wenn angenommen wird, dass alle interessierenden C-Spalten tatsächlich mit CY beginnen.
"\ w + \ d \ d" Entspricht mindestens einem oder mehreren Wortzeichen, unmittelbar gefolgt von mindestens zwei Ziffern. Dies würde beispielsweise sowohl für 'CY22' als auch für 'S12' passen, nicht jedoch für 'Carrier'.
Ich werde nicht zu sehr ins Detail gehen, aber es gibt viele Möglichkeiten, Strings zu analysieren. Reguläre Ausdrücke sind ein Thema, das viele Bücher füllen kann und hat. Die Grundlagen können jedoch schnell erlernt werden. Eine Stunde, um ein Youtube-Video anzusehen oder den Regex-Abschnitt des JSL Scripting Guide zu lesen, ist Ihre Zeit wert, wenn Sie vorhaben, eine beliebige Codierung durchzuführen. Reguläre Ausdrücke werden in vielen Programmiersprachen verwendet, sodass das Wissen übertragen werden kann.
Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?Genial! Das funktioniert genau das, wonach ich gesucht habe. Ich habe einen wiederholten Abschnitt hinzugefügt, um die "C" -Spalten zu konvertieren. Prost!!
Das einzige Problem ist jedoch, dass eine der anderen 'Namensspalten' (Carrier #) aufgegriffen wird. Was wäre die Skriptzeile, um nach "C. *" zu suchen, aber "Carrier #" auszuschließen?
Re: Hilfe bei der Analyse mehrdeutiger DAT-Dateien? Einheiten umrechnen, Labels hinzufügen?Während der Code Ihres ehemaligen Kollegen gut aussieht, kommentiert er ihn schlecht. Anstatt meine Zeit damit zu verbringen, es herauszufinden, habe ich nur die Funktionalität hinzugefügt, nach der Sie suchen. Halten Sie einfach den unten stehenden Code an das Ende.
Es ist auf jeden Fall eine bessere Programmiermethode, da es immer am besten ist, die funktionale Programmierung getrennt zu halten. Ein Code zum Analysieren, ein Code zum Konvertieren, ect. Hält den Code sauber, lässt sich einfacher debuggen, umgestalten, lesen, ect.
Dieser Code (1) findet alle Spalten, die mit "S" beginnen.
(2) fügt eine neue Spalte hinzu, die die vorherige Spalte in Inch umwandelt und das "(Inch)" - Etikett anbringt (kann leicht in (mm) umgewandelt werden.
(3) löscht die mils-Spalten. Sie können nur die letzten beiden Codezeilen entfernen, wenn Sie sie behalten möchten.
// Portion hinzugefügt
// Suche nach S-Spalten
S_spalten = {} ;
zum ( ich = 1 . ich <= ncols ( PEMdata_all ) . ich ++
Colname = Säule ( PEMdata_all . ich ) << Name abrufen ;
Ob ( ! wird vermisst ( Regex ( Colname . "S. *" )) .
einfügen in ( S_spalten . Colname )
)
) ;
// Neue Spalten mit Konvertierungen erstellen
zum ( ich = 1 . ich <= Nitems ( S_spalten ) . ich ++
newcol = PEMdata_all << Neue Spalte ( S_spalten [ ich ] || "(inch)" . Numerisch . Kontinuierlich .
Formel ( Säule ( PEMdata_all . S_spalten [ ich ]) [] * 1000 ));
// Löschen Sie optional vorherige Mils-Spalten
newcol << Formel löschen ;
PEMdata_all << Spalten löschen ( Säule ( PEMdata_all . S_spalten [ ich ]) ) ;
) ;