BBS: Inland Empire Archive Date: 05-13-92 (14:47) Number: 134 From: TOM HAMMOND Refer#: NONE To: ZACK JONES Recvd: NO Subj: Help with CASE Statement Conf: (2) Quik_Bas
ZJ>What I need to know is how to change the second Select Case so that it ZJ>works like the first one. All help is greatly appreciated. Zack: From my (limited) knowledge of the CASE statement (I use it all the time, I just don't know all the INs and OUTs of it!), It would appear that CASE permits you to ONLY make comparisons where the operator is an OR (rather than an AND as you are trying to do is your second example). The CASE statement in your second example: CASE IS <> "Telix Usag", "++ Setting", "Exiting Te", "++ Chars p" _really_ wants to ask: CASE IS <> "Telix Usag", AND <> "++ Setting", AND <> "Exiting Te",_ AND <> "++ Chars p" Unfortunately, CASE cannot handle such a construct (however, there may be another way that I'm not aware of). I'm not quite sure exactly what the CASE statement in your 2nd example actually translates to (in QB), but I'm pretty sure it's not what you want. My simplistic solution is to your problem is the following: DEFINT A-Z OPEN "telix.use" FOR INPUT AS #1 OPEN "out1.put" FOR OUTPUT AS #2 DO UNTIL EOF(1) LINE INPUT #1, rec$ SELECT CASE MID$(rec$, 21, 10) CASE "Telix Usag", "++ Setting", "Exiting Te", "++ Chars p" 'DO Nothing further with this record, we don't want it! 'Fall thru to next LOOP CASE "Elapsed ti" IF RIGHT$(rec$, 8) <> "00:00:00" THEN PRINT #2, rec$ + CHR$(13) LinesWritten% = LinesWritten% + 1 ENDIF CASE ELSE PRINT #2, rec$ LinesWritten% = LinesWritten% + 1 END SELECT LOOP CLOSE 1) Unless you are planning to do something further with test$, you don't really need to assign it. SELECT CASE MID$(rec$, 21, 10) works just as well. 2) Use CASE to test for the presence of the records you don't want to keep and then just do NOTHING with them. This will allow your execution to fall thru to the following LOOP. If a record turns out to be one which you DO wish to retain, it will fall thru to the next CASE statement(s). 3) In both of your examples (#1 and #2): CASE "Elapsed ti" IF RIGHT$(rec$, 8) <> "00:00:00" THEN PRINT #2, rec$ + CHR$(13) LinesWritten% = LinesWritten% + 1 will increment LinesWritten% REGARDLESS of whether rec$ is written to disk! I don't think this is actually what you intended to occur. I 'think' you intended that LinesWritten% be incremented ONLY when a line was actually written out, therefore, you'll need to include the LinesWritten% = LinesWritten% + 1 line INSIDE your IF THEN clause, so it executes ONLY when the result is TRUE: CASE "Elapsed ti" IF RIGHT$(rec$, 8) <> "00:00:00" THEN PRINT #2, rec$ + CHR$(13) LinesWritten% = LinesWritten% + 1 ENDIF I can't see much benefit of example #2 over example #1, unless you have FEWER lines you wish to OMIT than those you wish to KEEP. The logic is a bit more obscure in example #2. I suspect you'll get a bunch of other suggestions, and that many will be more elegant than this one. Pick one you like!!! Finally, the out.put file appears to contain one record which you did not mark with an asterisk, however it appears that the record SHOULD have been marked and was just inadvertently missed. This was the "Upload using Zmodem protocol" line. It is specifically spoken to in your example #1 as being one to retain, but it was not marked in the file. Good Luck Tom Hammond N0SS þ SLMR 2.1 þ If this were an actual tagline, it would be funny. --- WM v2.00/91-0231 * Origin: The Modem Zone BBS (314) 893-5106 (1:289/2)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET