Karl,

I cannot speak to the issue of speed but I am concerned about the safety of
either process; I believe you may end up with missing employees!

I believe the BASIC SELECT sets a pointer at the start of group 1 and steps
it through each item in that group before moving on to group 2. What could
happen is that the record with the new 6 digit key is written to a later
group and the item with the old key is deleted. Later, the SELECT would pick
up the new employee and, even though it already has a 6-digit key, would
write it back to the file and then immediately delete it!

I would prefer to see a TCL-style SELECT be performed instead of the BASIC
SELECT, e.g. PERFORM "SELECT CUSTEMP" instead of SELECT CF. This will
definitely not select any of the newly-created items, though it would also
fail if any employees on file already had 6-digit keys.

Alternatively, you could check the new item key differs from the original
item key before deleting an item.
E.g.       write REC on CF,NK
         if K # NK then
            delete CF,K 
         end

If my understanding of the BASIC SELECT is wrong I would be happy if someone
on this list could enlighten me.

Oh, and I must add that I much prefer the LOOP ... REPEAT syntax too! I
wouldn't imagine there would be much difference in speed and I find it
easier to write/debug.

Thanks for the interesting question!

Derek Falkner
Kingston, Ontario, Canada


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
[EMAIL PROTECTED]
Sent: Monday, December 13, 2004 10:33 AM
To: [EMAIL PROTECTED]
Subject: [U2] LOOP or GOTO on READNEXT


I've seen 2 ways to read a client key, change the length to 6 digits, then
write it back out, delete the old one and move on:

EXAMPLE 1 of 2:
!(FIXEMPNO) - Fix the employee number length
      open '','CUSTEMP' to CF else stopm 'Not'
      select CF
10:   readnext K else stop
      read REC from CF,K then
         NK = fmt(K,"R%6")
         write REC on CF,NK
         delete CF,K
      end
      go 10
   end

EXAMPLE 2 of 2:
!(FIXEMPNO) - Fix the employee number length
      DONE = 0
      open '','CUSTEMP' to CF else stopm 'Not'
      select CF
      loop
         readnext K else DONE = 1
      read REC from CF,K then
         NK = fmt(K,"R%6")
         write REC on CF,NK
         delete CF,K
      end
      repeat
   end

My intent is not to start a religious discussion about GO or GOTOs because I
see that method all over the place and regardless of why, who or whatever,
my question is, which is faster. (I prefer using loop..repeat syntax, FWIW).

-- 
Karl L. Pearson
Director of IT,
ATS Industrial Supply
Direct: 801-978-4429
Toll-free: 800-789-9300 1,29
Fax: 801-972-3888
http://www.atsindustrial.com
[EMAIL PROTECTED]
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to