Ersetzen Sie Zeichen in der ZeichenfolgeHallo JMP-Community,
Ich versuche, einen JSL-Code zu schreiben, der eine Spalte mit einer Zeichenfolge enthält und in jeder Zeile die Anzahl durch die Werte in der Zählspalte ersetzt. Die Endergebnisse sollten in etwa wie in der Spalte „Ergebnisse“ aussehen
Irgendwelche Vorschläge?
Automatisierung und SkripterstellungBetreff: Zeichen in der Zeichenfolge ersetzenVielen Dank, Jarmo
Betreff: Zeichen in der Zeichenfolge ersetzenIch denke, das Problem liegt an dieser Zeile
x[4] = Char( arra[binxx[j]] );
Ich würde die Schleife so ändern, dass sie eine Schleife über die Zeilen statt über ein assoziatives Array + Zeilen durchführt:
Names Default To Here(1);
dt = Current Data Table();
/// Get list of all the bins
binxx = Associative Array(:Bins[23 :: N Rows(dt)]) << Get Keys;
delcols = {"", " ", "}"};
/// Remove garbage values
For(i = 1, i <= N Items(delcols), i++,
Remove From(binxx, As List(Loc(binxx, delcols[i])));
);
///Get rows where Bins column contains BIN =
rows = dt << get rows where(Contains(:Bins, "BIN = "));
total = {};
//Loop to calculate the count of each bins
For(i = 1, i <= N Items(binxx), i++,
Insert Into(total, N Items(dt << get rows where(:Bins == binxx[i])))
);
//create array to store bin and counts
arra = Associative Array(binxx, total);
//loop to modify the character count in the table
For(i = 1, i <= N Items(rows), i++,
x = Words(:Bins[rows[i]]);
curbin = Substitute(x[3], "\!"", "");
If(Contains(arra, curbin),
x[4] = Char(arra[curbin]);
:Bins[rows[i]] = Concat Items(x);
,
continue();
);
);Betreff: Zeichen in der Zeichenfolge ersetzen@jthi
Ich habe die Cragis-Logik verwendet, um die Anzahl in der Zeichenfolge zu aktualisieren, aber sie ersetzt nicht die korrekte Anzahl in der Zeichenfolge. Ich bin mir nicht sicher, was ich falsch mache. Können Sie sich meinen Code ansehen?
Weist falsche Zählungen zu
Hier ist der Code:
dt = Current Data Table();
/// Get list of all the bins
binxx = Associative Array( :Bins[23:: N Rows( dt )] ) << Get Keys;
delcols = {"", " ", "}"};
/// Remove garbage values
For( i = 1, i <= N Items( delcols ), i++,
Remove From( binxx, As List( Loc( binxx, delcols[i] ) ) );
);
///Get rows where Bins column contains BIN =
rows = dt << get rows where( Contains( :Bins, "BIN = " ) );
total = {};
//Loop to calculate the count of each bins
For( i = 1, i <= N Items( binxx ), i++,
Insert Into( total, N Items( dt << get rows where( :Bins == binxx[i] ) ) )
);
//create array to store bin and counts
arra = Associative Array( binxx, total );
//loop to modify the character count in the table
For( j = 1, j <= N Items( binxx ), j++,
For( i = 2, i <= N Items( rows ), i++,
If( Contains( arra, Substr( :Bins[i], 8, 1 ) ),
x = Words( :Bins[rows[i]] );
x[4] = Char( arra[binxx[j]] );
:Bins[rows[i]] = Concat Items( x );
)
)
);
Betreff: Zeichen in der Zeichenfolge ersetzenDanke Craig und Jarmo
Betreff: Zeichen in der Zeichenfolge ersetzenRegex ist eine weitere Option
Regex(:Results, "(BIN = \!".+\!") (\d+)(\!".+)", "\1 " || Char(:Count) || "\3")
aber in diesem Fall würde ich Words() + Concat Items() verwenden, wie Craige vorgeschlagen hat (wenn das Muster immer dasselbe ist)
Betreff: Zeichen in der Zeichenfolge ersetzenDie Saiten scheinen dem gleichen Muster zu folgen. Verwenden Sie möglicherweise die Funktion „words()“ mit einem Leerzeichen oder „ als Trennzeichen. Verwenden Sie dann Concatitems(), um es wieder zusammenzusetzen.
