What you may be missing is how to selects differ. The 'EXECUTE SELECT' selects the complete file before processing starts. The 'SELECT file.var' selects one group at a time and processes that group. If a Key changes it may get written to a different group. If that group is after the original group then the basic select will find it again when it gets to that group.
In your example, when it found the Key the second time the Key would already be 6 digits so it would not change, Old Key = New Key. You would then write it with New Key and immediately delete it with Old Key. No more record. Richard ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, December 13, 2004 3:10 PM Subject: RE: [U2] LOOP or GOTO on READNEXT > <quote who="Dean Fox"> > > Your understanding of the BASIC select is correct. It starts in group one > > and works it's way down. In my early years of PICK programming I learned > > this the hard way. As this user hasn't yet seen adverse effects is luck > > vs. > > design. > > Okay, Bait taken. I just ran 2 programs. One that does: > > execute 'SELECT FILENAME' capturing NOTHIN > > and then one that does: > > select FILEVAR > > I had them print CNT and KEY as they looped through. Both lists were > identical in order. Am I missing something? > > Karl > > > > > Probably because of the a change to the least significant portion of the > > ID > > (hash wise) and the number of groups vs. items, they're all hashing to the > > same group after the ID change. > > > > In a similar test where the new ID would hash to a forward group, in the > > code provided, it would be deleted. Been there, done that and now know > > better. > > > > -[d]- > > > > -----Original Message----- > > From: Derek Falkner [mailto:[EMAIL PROTECTED] > > Sent: Monday, December 13, 2004 11:16 AM > > To: [EMAIL PROTECTED] > > Subject: RE: [U2] LOOP or GOTO on READNEXT > > > > > > 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/ > > ------- > > u2-users mailing list > > [EMAIL PROTECTED] > > To unsubscribe please visit http://listserver.u2ug.org/ > > > > > -- > 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/
