// // SUMME.VDM Summenberechnung einer Tabellenspalte // (C) C.Z. 27.4.94 // VEDIT 4.20 14.12.95 // // Die Spalte muss mit Spaltenblock komplett markiert sein! // // // Achtung: Fehlerbehandlung evtl. noch nicht ausgereift // nur fr ganzzahlige bzw. mit 100stel (DM...) // // einzelne Zahlenwerte > MAXNUM fhren zu Fehler! // // #1 Fehlerflag // #2 Vorzeichen // #11 Summenspeicher // #12 // #13 Summenspeicher // #14 // #15 // #16 // #17 // #18 // if ((Cur_Col == 0 | Block_Begin == -1 | Block_End == -1) ) { Message("Kein Spaltenblock markiert !!!") #1 = Get_Key(" Bitte eine Taste drcken ...",RAW) Return } #1 = #11 = #13 = #16 = #17 = 0 Set_Marker(9,Cur_Pos) // Editposition merken Goto_Pos(Block_Begin) // an Blockbeginn repeat (ALL) { Search("|!|W",ADVANCE+NOERR) // n„chstes Nicht-Blank suchen if ( ! error_flag) { Char(-1) // darauf } if ((Cur_Col <= Column_End) ) { // innerhalb des Blockes ? if ((Cur_Char == 45) ) { // Minus-Zeichen ? #2 = -1 Char(1) } else { #2 = 1 } if ((Cur_Char == 44 | Cur_Char == 46) ) { // wenn Komma oder Punkt Char(1) // ein Zeichen weiter #12 = Num_Eval() // Nachkommanateil holen if ((Chars_Matched<>2 & Chars_Matched<>0) ) { // 0 od. 2 Zeichen Nachkommast. gefunden ? Ins_Text(" <--??? ") // nein : Fehler #1 = 1 } else { #13 = #13 + (#12 * #2) // sonst summieren } } else { #10 = Num_Eval() // Wert holen if ((Chars_Matched > 0)) { // wenn Wert gefunden if ((Cur_Col-1 <= Column_End) ) { // Position komplett im Block ? #18= #11+#10 * #2 // Trick, weil bei šberlauf der if (#18 == 0) { // gesamte Ausdruck 0 wird. #16++ #11 = #11 - MAXNUM + #10 * #2 // summieren } else { #11 = #11 + #10 * #2 // summieren } if ((Cur_Char == 44 | Cur_Char == 46) ) { // wenn dann Komma o. Punkt Char(1) // ein Zeichen weiter #12 = Num_Eval() // Nachkommanateil holen if ((Chars_Matched<>2 & Chars_Matched<>0) ) { // 0 od. 2 Zeichen Nachkommast. gefunden ? Ins_Text(" <--??? ") // nein : Fehler #1 = 1 } else { #13 = #13 + (#12 * #2) // sonst summieren } } } else { Ins_Text(" <--??? ") #1 = 1 // Fehlerflag } } } } Line(1) // n„chste Zeile if ((Cur_Pos > Block_End) ) { Break } Char(Column_Begin-1 ) // in Spalte } #14 = #13 / 100 // Ganze aus Nachkommastellen #11 = #11 + #14 // dazuaddieren #15 = Remainder // Rest Nachkommastellen if ((#13 < 0 & #15 > 0) ) { // wenn negativer Rest #11 = #11 - 1 #15 = 100 - #15 } Goto_Pos(Marker(9)) // an Edit-Position while (#16 > 0) { #11 = #11 + 147483647 #17 = #17 + 2 #16-- } if (#17 > 0) { Num_Ins(#17,LEFT+NOCR) } Num_Ins(#11,LEFT+NOCR) // Ergebnis ausgeben if (#15 > 0) { Ins_Text(",") Num_Ins(#15,LEFT+NOCR) } if ((#1==1) ) { Ins_Text(" Fehler! siehe <--???") }