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

Reply via email to