Domino 9 und frühere Versionen > ND8: Entwicklung

Über Textliste weitere, berechnete Textliste mit Summenfunktion?!?

(1/2) > >>

Silver:
Hallo,

ich möchte über eine vorhandene Textliste eine weitere Liste berechnen, die u. a. eine Summe bei jew. gleichem String-Anfang enthalten soll. Am besten erklärt/erläutert über Bsp.:

Vorhandenes Feld mit Textliste:
1234~550,00
9876~300,00
1234~200,00
6543~150,00
6543~50,00

Nun soll also anhand des jew. Element-Anfangs eine Summe gebildet und wieder in einer neuen Textliste ausgegeben werden (pro Element-Anfag bis "~" ein Element, evtl. über @Unique gekürzt?!?). Gewünschtes Ergebnis:
1234~750,00
9876~300,00
6543~200,00

Ich habe zwar schon einiges ausprobiert (@For?!?) - schaffe es aber leider nicht.
Kann mir jemand weiterhelfen?!? Wäre super.

Tode:
1. Ich hoffe, das bleibt in Deutschland, sonst kriegst Du mit Deinen Zahlen im Textfeld Probleme (, und . vertauscht)...

2. Ich dachte, das wäre recht simpel und habe das kurz ausprobiert... ist doch nicht ganz so simpel, normalerweise liefer ich auch keine fertigen Lösungen, aber das Problem war interessant:

--- Code: ---_allNams := @Unique( @Word( TextListe ; "~" ; 1 ) );
_elements := @Elements( _allNams );
REM "Hier wird eine Liste mit der selben Anzahl Elemente wie _allNams aufgebaut, gefüllt mit nullen";
_allVals := @TextToNumber( @Trim( @Explode( @Repeat( "0~" ; _elements ); "~" ) ) );
_allValsX := _allVals;
@For( i := 1 ; i <= @Elements( TextListe ) ; i := i + 1;
_nam := @Word( TextListe[i] ; "~" ; 1 );
_val := @TextToNumber( @Word( TextListe[i] ; "~" ; 2 ) );
_pos := @Member( _nam ; _allNams );
_vals1 := @If( _pos = 1 ; "" ; @Subset( _allVals ; _pos - 1 ) );
_vals2 := @Subset( @Subset( _allVals ; _pos ) ; -1 ) + _val;
_vals3 := @If( _pos = _elements ; "" ; @Subset( _allVals ; _pos - _elements ) );
_allVals := @If( _pos = 1 ; _vals2 : _vals3; _pos = _elements ; _vals1 : _vals2 ; _vals1 : _vals2 : _vals3 )
);

@For( k := 1 ; k <= _elements ; k := k + 1;
_newVal := _allNams[k] + "~" + @Text( _allVals[k] );
_newVals := @Trim( _newVals : _newVal )
);
_newVals;
--- Ende Code ---

Der Code macht keinerlei Prüfungen, ob da gültige Zahlen drin sind und fällt auf die Schnauze, wenn das nicht der Fall ist... aber als Ansatz sollte es reichen...

Silver:
Hallo Tode,

vielen, herzlichen Dank für Deine Antwort bzw. Hilfe.
Aber bei mir bringt die Variable _allVals in unserem Bsp.:
0,00
0,00
0,00

D. h. in der neuen Liste sieht`s dann wie folgt aus:
1234~0
9876~0
6543~0

Habe ich da noch etwas übersehen?

pram:
Ich hätt noch eine interessante Lösung mit @Transform:

--- Code: ---TextListe := "1234~550,00":"9876~300,00":"1234~200,00":"6543~150,00":"6543~50,00";
_allNames := @Unique( @Word( TextListe ; "~" ; 1 ) );
tmp := "~" + TextListe;
@transform(_allNames; "x"; @do(
    candidates := @ReplaceSubstring(tmp; "~" + x + "~"; "candidate");
    needed := @trim(@Replace(tmp;candidates;""));
    summands := @RightBack(needed;"~");
    x + "~" +@text(@sum(@textToNumber(summands)))
))

--- Ende Code ---
Der Trick ist, dass man in der Textliste die Werte die man braucht durch "~candidate~..." ersetzt (oder ein String der halt nicht vorkommt).
In der Liste stehen dann die Werte die man nicht braucht unverändert drin, welche man dann mit einem erneuten Replace entfernen kann.
Wichtig ist noch die Zeile
tmp := "~" + TextListe;
sonst sind die Ersetzungen u.U nicht eindeutig.

Gruß
Roland

Tode:
Sehr elegant @Roland... Dein Code funktioniert wunderbar, obwohl ich mich erst mal durch den Variablennamen habe in die Irre führen lassen... tatsächlich steht in "candidates" die Liste der Werte, die gerade NICHT verarbeitet werden (weil der "Candidate" ja per Replacesubstring rausgeflogen ist...).

Als @For- Schleife könnte man Deine Idee ja 1:1 ebenfalls umsetzen, und sie ist definitv eleganter als meine.

@Silver: Ne, so geht's nicht... Ich liefere Dir (entgegen der normalen Vorgehensweise hier im Board und entgegen meiner normalen Überzeugung) fertigen Code, und Du willst, dass ich Ihn auch noch für Dich debugge? Sorry... Der Code ist wirklich nicht schwer zu durchschauen, und auch wenn die Formelsprache nicht so ganz einfach zu debuggen ist, müsstest Du doch in der Lage sein, aus diesem Beispiel was lauffähiges zu basteln. Normalerweise verdiene ich mit solchen Dingen nämlich meine Brötchen...

Gruss

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln