For-Schleife funktioniert nicht wie vorgesehenHallo,
Ich habe zwei sehr verwirrende Probleme.
1) Für die einfache for-Schleife unten habe ich drei Bedingungen, die für eine einzelne Ausgabe erfüllt sind. Ich habe durch manuelle Suche und grafische Darstellung überprüft, dass tatsächlich alle 8 Kombinationen in den Daten vorhanden sind. Das Ergebnis ist jedoch einseitig, da nur x1, x2 und x3 in alle Zellen der Spalte X1 eingefügt werden. Dem Eintrag x2 wird beispielsweise die doppelte Anzahl an Einträgen zugewiesen. Bei einer weiteren Prüfung anhand der Teilmenge werden die Spalten A1, B1 und C1 tatsächlich sowohl für x2 als auch für x4 erfüllt, was zu gleichen Teilen der Fall wäre. Alle Spalten haben denselben Daten- und Modellierungstyp.
Ich habe auch den Eintrag blockiert, der die doppelte Anzahl an Einträgen sammelt, nur um zu sehen, was passieren wird. Dann werden die Einträge beispielsweise in x2 gebündelt.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2";
);
);
2) Wenn ich den Code verkürze, indem ich der Zelle mit & Werte zuweise, erhalte ich die Fehlermeldung „Es wird versucht, einem Objekt zuzuweisen, das kein L-Wert ist“. Dies ist ein Versuch, meinen Code zu kürzen und nicht mehrere verschiedene Schleifen zu haben. Unten finden Sie ein Beispiel für drei Kriterien und drei Ausgaben.
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
);
);
Jede Anleitung wäre dankbar. Vielen Dank für Ihre Hilfe im Voraus!
Qualitäts- und VerfahrenstechnikBetreff: Die For-Schleife funktioniert nicht wie vorgesehenIch habe auch dafür gesorgt, dass die Spaltennamen im Code korrekt aufgerufen werden, und ich habe sowohl Kommas als auch Semikolons am Ende einer Zeile ausprobiert. Ich habe den Code in kleinere Stücke zerlegt und die möglichen Werte in Spalte A1 in verschiedene for-Schleifen aufgeteilt, aber ich habe das gleiche Problem.
Betreff: Die For-Schleife funktioniert nicht wie vorgesehenHi @StarfruitBob ,
Du bist nah dran...
Die Syntax für ein wenn funktion ist If( Bedingung 1, Ergebnis1, Bedingung 2, Ergebnis 2, sonst Ergebnis ).
Überarbeiten Sie also Ihre Anweisung, indem Sie das abschließende Semikolon durch ein Komma ersetzen:
For( i = 1, i <= N Rows ( dt ), i++,
If(
// condition 1 = :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1"
// result 1 = :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
);
);
HTH.
Prost,
Stan
Betreff: Die For-Schleife funktioniert nicht wie vorgesehenHallo Stan,
Vielen Dank für Ihre schnelle Antwort!Damit habe ich bereits experimentiert und anstelle von x1, x2 und x3 werden zum Beispiel x1, x2 und x4 gefüllt.
Dies geschieht auch bei mehreren Ausgängen, wie z. B. Spalte X1 und Y1.
Betreff: Die For-Schleife funktioniert nicht wie vorgesehenJa, stellen Sie sicher, dass Sie die Kommas verwenden, wie Stan es vorschlägt. Wenn Geheimnisse
Edit: Ich denke du willst
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x2" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x2" ,
throw("Nothing matched!") // this is the otherwise case
);
Wenn Sie wirklich mehrere Zuweisungen wünschen, verwenden Sie ; statt &
:X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2" // change this
:X1[i] = "x1"; :Y1[i] = "y1"; :Z1[i] = "z2"; // to this
Während es mit & funktionieren könnte, wird es sehr zerbrechlich und für die nächste Person sehr schwer zu lösen sein. Wie Sie sagen, sieht der Compiler
a=1 & b=2
wie
a = ( ( 1 & b ) = 2 )
die die L-Wert-Nachricht erzeugt. Es wäre schön, wenn die Fehlermeldung nicht für Programmierer sprechen würde Ich kann den Wert 2 von der rechten Seite des = nicht in "1 & b" auf der linken Seite des = speichern, weil "1 & b" kein Variablenname ist .
Eigentlich macht der Compiler einen recht guten Job für a=1 & b=2:
Versuch, ein Objekt zuzuweisen, das kein L-Wert im Zugriff oder in der Auswertung von 'Assign' ist, 1 & b = /*###*/2 /*###*/
Betreff: Die For-Schleife funktioniert nicht wie vorgesehenDies war buchstäblich mein zweiter Versuch von all dem, und ich kam am Wochenende noch einmal darauf zurück und es funktionierte.Ich habe keine Erklärung dafür, warum es nicht funktioniert hat, als ich es das erste Mal so probiert habe.Danke für Ihre Antwort!