Martin Wodrich <[EMAIL PROTECTED]> wrote on 05.02.06: > Michael Heydekamp <[EMAIL PROTECTED]> schrieb am 02.02.06 um 17:08:
>> b) zusätzlich sicherstellen, daß selbst bei versehentlich längeren >> Strings auf jeden Fall ein CRLF angehängt wird (z.B. indem man >> ein 'truncstr(s,sizeof(variable)-3)' davorschaltet). Das sieht >> dann bei gekürzten Strings zwar unschön aus, führt aber >> wenigstens zu einer technisch sauberen Nachricht. > Ebenfalls geschehen. Hab ich mir eben mal im daily diff angesehen: ----------8<---------- procedure Set_XP_ID; begin XP_ID:='## '+xp_xp+' '+verstr+betastr+ - ovrstr+iifs(is_freereg,'',krk(regstr))+' ##'+#13#10; + ovrstr+iifs(is_freereg,'',krk(regstr))+' ##'; + XP_ID:=Copy(XP_ID,0,78)+#13#10; end; ----------8<---------- Warum 'copy' ab Pos. 0? Das muß IMO Pos. 1 sein. Wenn das mit 0 funktioniert, würde mich interessieren, warum. Und im Code mit festen Werten wie 78 zu arbeiten, ist auch immer eine gute Bugquelle, denn wenn jemand irgendwann mal die Stringvariable wieder anders dimensioniert, muß er daran denken, auch den Code anzupassen. Nicht ohne Grund hatte ich oben mit 'sizeof' gearbeitet. Gibt verschiedene Möglichkeiten: 1) XP_ID:=left(XP_ID,sizeof(XP_ID)-3)+#13#10; 2) truncstr(XP_ID,sizeof(XP_ID)-3)); XP_ID:=XP_ID+#13#10; 3) XP_ID:=copy(XP_ID,1,sizeof(XP_ID)-3)+#13#10; Ich würde 1) nehmen, dürfte am schnellsten sein. Bei 'sizeof' muß man berücksichtigen, daß das Längenbyte mitgezählt wird, deshalb "-3". Noch etwas: ----------8<---------- { CrossPoint - First Unit } @@ -257,7 +257,7 @@ writeln(t); write(t,xp_xp); if (xp_xp='CrossPoint') then write(t,'(R)'); - writeln(t,' ',verstr,betastr,ovrstr); + writeln(t,' ',verstr,betastr,iifs(rufstr<>'',' ('+rufstr+')',''),ovrstr); writeln(t,x_copyright,' by ',author_name,' (',author_mail,')'); writeln(t); if _deutsch then @@ -361,6 +361,14 @@ ----------8<---------- Wir hatten ja gesagt, daß Rufnamen sowohl immer in Klammern als auch in Anführungszeichen eingeschlossen werden sollen. Offenbar sind die Anführungszeichen Bestandteil der Stringvariablen, die Klammern werden aber erst beim Schreiben ergänzt. Ich würd's insofern vereinheitlichen, als daß entweder beides Bestandteil des Strings ist und man dann einfach übersichtlicher schreibt ... writeln(t,' ',verstr,betastr,rufstr,ovrstr); ... oder beides eben nicht Bestandteil des Strings ist und auch die Anführungszeichen erst beim Schreiben ergänzt werden. Ich würde die erste Variante bevorzugen, dann muß man nur darauf achten, daß die Variable ein leading blank hat. Die anderen Stellen wären entsprechend anzupassen. iifs()-Konstrukte vermeide ich jedenfalls gerne da, wo sie ohne großen Aufwand zu vermeiden sind. Michael ------------------------------------------------------------------------ FreeXP Entwickler-Mailingliste Dev-List@freexp.de http://www.freexp.de/cgi-bin/mailman/listinfo/dev-list