Verketten Sie Tabellen und schließen Sie die EingabedateienIch suche nach einer Möglichkeit, die offenen Tabellen zu schließen, die zur Eingabe dienten
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Tabellen[f2] << /*###*/Concatenate(
Tabellen[f2 + 1],
Name der Ausgabetabelle („Beide“)
) /*###*/;
Close( filelist[f2], No Save );
);
Die Antwort im Protokoll lautet:
Send erwartet ein skriptfähiges Objekt beim Zugriff oder bei der Auswertung von „Send“, Tables[f2] << /*###*/Concatenate( Tables[f2 + 1], Output Table Name( „Both“ ) ) /*###* /
Betreff: Tabellen verketten und Eingabedateien schließen
@rc_hertzy schrieb:
Schöne Lösung. Erstens ein Tippfehler (Gleichheitszeichen, nicht Minuszeichen): Die vierte Zeile sollte sein
dt=Datentabelle(1);
Wie kann ich nun eine Spalte für die Quelle behalten? Wenn ich nur hinzufüge
Quellspalte erstellen
In der Concatenate-Anweisung erhalte ich aufeinanderfolgende Quellspalten, aber keine ist das, was ich möchte – eine Auflistung aller Quelldateien.
Verwandt: Wenn ich Dateien manuell verkettete und das Quellskript aus der Ausgabedatei in ein Skriptfenster kopierte, konnte es nicht ausgeführt werden, was zu der Fehlermeldung führte, dass die aufgelisteten Dateinamen nicht gefunden wurden. Hier ist das Skript (File1.jmp ist die ausgewählte geöffnete Datei):
dt = Aktuelle Datentabelle();
dt << Verketten (
Datentabelle ( „Datei2.jmp“ ),
Datentabelle ( „Datei3.jmp“ ),
Ausgabetabelle( „Combinedtest.jmp“ ),
Quellspalte erstellen
);
Danke. -Rick
Ich habe meinen Fehler im letzten Teil gefunden. Ich hatte eine Datendatei umbenannt, sodass das Skript sie natürlich nicht finden konnte.
Dennoch würde ich gerne eine Möglichkeit finden, Ihre Lösung so zu ändern, dass eine Quellspalte hinzugefügt wird, sodass ich nicht alle geöffneten Dateien explizit auflisten muss. Danke.
Betreff: Tabellen verketten und Eingabedateien schließenSchöne Lösung. Erstens ein Tippfehler (Gleichheitszeichen, nicht Minuszeichen): Die vierte Zeile sollte sein
dt=Datentabelle(1);
Wie kann ich nun eine Spalte für die Quelle behalten? Wenn ich nur hinzufüge
Quellspalte erstellen
In der Concatenate-Anweisung erhalte ich aufeinanderfolgende Quellspalten, aber keine ist das, was ich möchte – eine Auflistung aller Quelldateien.
Verwandt: Wenn ich Dateien manuell verkettete und das Quellskript aus der Ausgabedatei in ein Skriptfenster kopierte, konnte es nicht ausgeführt werden, was zu der Fehlermeldung führte, dass die aufgelisteten Dateinamen nicht gefunden wurden. Hier ist das Skript (File1.jmp ist die ausgewählte geöffnete Datei):
dt = Aktuelle Datentabelle();
dt << Verketten (
Datentabelle ( „Datei2.jmp“ ),
Datentabelle ( „Datei3.jmp“ ),
Ausgabetabelle( „Combinedtest.jmp“ ),
Quellspalte erstellen
);
Danke. -Rick
Betreff: Tabellen verketten und Eingabedateien schließenHier ist eine einfache Methode, um die Tabellen zu verketten und die nicht benötigten zu schließen
Names Default To Here( 1 );
Final_Table="Data_" || char(ntable);
// Concatenate the tables and delete them. Add all of the tables to the first table
dt-data table(1);
For( i = 2, i <= N Table(), i++,
dt << concatenate(data table(i), append to first table(1));
close(data table(i), nosave);
);
// Rename the table to the desired name
dt << set name(Final_Table);
Betreff: Tabellen verketten und Eingabedateien schließenJim,
Wenn Sie sich die beiden beigefügten Tabellen ansehen, haben sie die gleiche Anzahl an Spalten und Spaltennamen. Der einzige Unterschied zwischen beiden ist die Anzahl der Zeilen. Spalte Nr. 1 ist der Zeitstempel und auf dieser Grundlage werden Duplikate entfernt.
Die Methode als Skript funktioniert. Ich suche nach einer effizienten Möglichkeit, den Finaltisch zu speichern und die Tische zu schließen, die als Eingabe für das Finale dienten.
Mit freundlichen Grüßen,
Christian
Betreff: Tabellen verketten und Eingabedateien schließenKönnen Sie bitte ein Beispiel Ihrer Datentabellen und eine Veranschaulichung dessen liefern, was als doppelte Zeilen gelten würde?
Betreff: Tabellen verketten und Eingabedateien schließenJim, danke für die Antwort. Lassen Sie mich noch etwas näher darauf eingehen. Ziel ist es, eine Liste von Datentabellen zu verketten und doppelte Zeilen zu löschen. Alle Datentabellen, die zur endgültigen verketteten Tabelle beigetragen haben, werden geschlossen. Die Anzahl der Eingabedatentabellen ist variabel. Die Auswahl der zu verkettenden Datentabellen folgt der Regel, dass die Anfangszeichenfolgen gleich sind und der endgültige Name der verketteten Datentabelle dieselbe Zeichenfolge ist.
Hier nun der Code für die Verkettung und das Löschen doppelter Zeilen sowie das Speichern der endgültigen Tabelle.
If(N Items(filelist)>0,
for (nu_t = 1, nu_t <= num_tables, nu_t++,
FinalTable = Munger(filelist[1],6,4);
Final_Table = "Data_"||FinalTable||".jmp";
//Show(FinalTable);
für (f2 = 1, f2 < nitems(Tables), f2++,
ConcTable = Tables[f2] << Concatenate(Tables[f2+1], Output Table Name( "Both" ) );
Close( Tables[f2] , No Save );
);
// Doppelte Zeilen löschen
ConcTable = Aktuelle Datentabelle();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( ConcTable << get Column Names( string ), "\!"), :Name(\!"" ) || "\!"))" );
Duplikate = [];
Für jede Zeile( If( col_min != Row(), Duplikate |/= Row() ) );
ConcTable << Zeilen löschen (Duplikate);
ConcTable << Save(Path_datatable_out||Final_Table);
//For(cc=1,cc <= nitems(Tables),cc++, Close(Tables[cc], No Save));
);
); // Wenn Bedingung
Ich freue mich auf deine Antwort.
Christian
Betreff: Tabellen verketten und Eingabedateien schließenHier ist ein Code, der funktioniert und der von Ihnen angegebenen Logik folgt. Ich verstehe jedoch nicht, warum Sie dies tun möchten. Vielleicht ist das Ergebnis also nicht das, was Sie sich vorstellen. Wenn nicht, antworten Sie mit dem Endergebnis.
Names Default To Here( 1 );
// Create sample tables
dt = Open( "$SAMPLE_DATA\big class.jmp" );
dt << subset( selected rows( 0 ), selected columns( 0 ), by( :age ) );
Close( dt, nosave );
// Create your Tables list
Tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( Tables, Data Table( i ) << get name )
);
// Run the concatinations
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Data Table( Tables[f2] ) << Concatenate( Data Table( Tables[f2 + 1] ), Output Table Name( "Both" ) );
Close( Data Table( Tables[f2] ), No Save );
);