Spalten in einer Schleife erstellen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hi,
In meinem Skript habe ich also eine Schleife, die Spalten erstellt, es funktioniert großartig, aber ich möchte es ein wenig verbessern. Ich habe Daten in der Form (Zahl)|(Zeichen)|(Zahl)|(Zeichen) usw. Ich habe also wechselnde Datentypen und möchte sie in ihrer normalen Form drucken. Im Moment sind die Spalten in numerischer Form, sodass ich keine Zeichendaten sehen kann. Aber wenn ich es in das Zeichenformat ändere, verliere ich die numerische Datenstruktur. Also ich habe diese Schleife:
For(j = 1, j <= nitems(pinList), j++,
dt2 << Neue Spalte (pinList, Numerisch, Kontinuierlich, Format("Beste",12));
dt2 << New Column(pinList[j++], Character, Nominal);
);
Wo ich alle Spaltennamen in meinem pinList-Array definiere. Das funktioniert, bis auf die Tatsache, dass es den Eintrag bei pinList dupliziert(was in diesem Fall eigentlich nicht schlimm ist). Das eigentliche Problem tritt auf, wenn ich versuche, eine weitere Schleife danach auszuführen, die diese Daten analysiert, die durch ein '|' begrenzt sind. und fügen Sie es in die neuen Spalten ein.
Für (i = 1, i <= nrows(dt2), i++,
one_test_result_list = words(column(dt2,"Test_Result") , "|");
Für (k = 1, k <= nitems(one_test_result_list), k++,
Spalte(dt2, pinList) = one_test_result_list;
);
);
Die letzte Zeile wird einmal ausgeführt und bricht dann wegen des nächsten Eintrags in pinList abhat eine "2" dahinter, weil beim Erstellen der Spalten jeder Name dupliziert wurde. Ich bin mir nicht sicher, wie ich das zum Laufen bringen soll. Ich kann alle Namen definieren, die ich im pinList-Array haben möchte, aber ich möchte abwechselnde Spaltentypen von Zahlen und Zeichen.
Jede Hilfe wird sehr geschätzt! Danke!!
Betreff: Spalten in einer Schleife erstellenIch hatte eine Variation davon ausprobiert, aber ich habe das j++ vor die zweite neue Spaltenzeile gesetzt. Ich habe auch die if-Anweisung verwendet, um durch meine geparste Datenliste zu gehen. Also habe ich sie so kombiniert:
Für ( j = 1 , j <= N Artikel ( PinListe ) , j ++,
dt2 << Neue Spalte ( PinListe [ j ] , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) ) ;
dt2 << Neue Spalte ( PinListe [ j + 1 ] , Charakter , Nominal ) ; // Spalte für j+1 erstellen.
j ++; // Dann iteriere mit j=j+1.
) ;
Für ( ich = 1 , ich <= N Zeilen ( dt2 ) , ich ++,
one_test_result_list = Wörter ( Spalte ( dt2 , "Testergebnis" ) [ ich ], "|" ) ;
Für ( j = 1 , j <= N Artikel ( ein_test_ergebnis ) , j ++,
Wenn ( Modulo ( j , 2 ) == 1 ,
Spalte ( dt2, pinListe [ k ] ) [ ich ] = Anz ( one_test_result_list [ k ]) ; // Ausführen für ungerades j
Spalte ( dt2, pinListe [ k ] ) [ ich ] = one_test_result_list [ k ] ; // Für gerades j ausführen
);
);
) ;
Das funktioniert perfekt. Es stellt also sicher, dass die numerischen Ergebnisse als Zahlen gedruckt werden und die Zeichen in ihrem normalen Format vorliegen. Vielen Dank für deine Hilfe!!
Betreff: Spalten in einer Schleife erstellenHallo Sophie,
Wenn ich Ihr Skript richtig verstehe, entsteht das Problem meiner Meinung nach durch Ihre Verwendung von j ++ innerhalb des Schleifenkörpers, da j ++ j nur iteriert, nachdem die Schleife eine Iteration abgeschlossen hat.Ich kann mir ein paar Möglichkeiten vorstellen, dies zu umgehen.Eine Methode besteht darin, j++ durch j+1 zu ersetzen und dann eine separate Zeile für j++ hinzuzufügen.Die andere Methode besteht darin, eine If()-Anweisung hinzuzufügen, um separate Befehle für gerade und ungerade j zu erstellen.
In den Beispielen 1 und 2 finden Sie ein Beispiel dafür, wie i++ im Körper einer Schleife funktioniert.
Ich hoffe das hilft.
Namen standardmäßig hierher ( 1 ) ;
dt2 = Neue Tabelle ( "dt2" , Zeilen hinzufügen ( 20 ) ) ;
PinListe = { "EIN" , "B" , "C" , "D" , "E" , "F" } ;
Für ( j = 1 , j <= N Artikel ( PinListe ) , j ++,
dt2 << Neue Spalte ( PinListe [ j ] , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) ) ;
dt2 << Neue Spalte ( PinListe [ j + 1 ] , Charakter , Nominal ) ; // Spalte für j+1 erstellen.
j ++; // Dann iteriere mit j=j+1.
) ;
Für ( j = 1 , j <= N Artikel ( PinListe ) , j ++,
Wenn ( Modulo ( j , 2 ) == 1 ,
dt2 << Neue Spalte ( PinListe [ j ] , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) ) , // Ausführen für ungerades j.
dt2 << Neue Spalte ( PinListe [ j ] , Charakter , Nominal ) // Für gerades j ausführen.
)
) ;
// Beispiel 1.
Für ( ich = 1 , ich <= 10 , ich ++,
Drucken ( ich ) ;
Drucken ( ich ++ ) ;
) ;
// Beispiel 2.
Für ( ich = 1 , ich <= 10 , ich ++,
Drucken ( ich ) ;
Drucken ( ich + 1 ) ;
ich ++;
) ;