How would you alphabetize a list from a .txt file?
PLEASE RESPOND SOON!!!!!!!!!!!
alphabetize lists
Moderators:Administrator, Global Moderator
Re: Alpebatizing lists
I know how to do it, but class is almost over, will respond tomarow at 11:30 AM
Re: Alpebatizing lists
correction, monday at 11:30 AM
Re: Alpebatizing lists
'Please note: this is most likely not the best way to do 'it, I have never done this until now... but providing this 'is not in a tite loop, it goes wrather fast. [This was 'writen in qb4.5]
'You are free to change/destribute this file without giving me credit.
'all it does is load the file into a matrix, then go threw 'and see if the last line's first is less, if it is, then it swaps 'the two. the enforce loop is to make sure everything 'goes smoothly, but during testing, only moved blank 'spaces to the end of the file (top or bottom, don't 'know). as it is, it is not case sensitive. if you want it to 'be, you cannot just remove the lcase$ on all of the if 'statements. this is because ALL of the upper case 'alphabet comes before lower on the ascii table. to 'make it be case sensitiv, you must make it so that 'when it encounters 2 like values, it finds wich is less 'without the lcase$, if they are the same, don't swap, if 'one is then swap in the respective direction. this 'program was only tested on small lists since I am lazy 'and did not want to spend time on testing 7 minuts
'worth of code (that's 'bout how long it took). I will 'admit, this took a little more thought then I expected it 'too since I have never done it. But it was still wrather 'easy. If you need more help on the ascii table or I/O
'feel free to ask since I use both quit often in my 'programs.
'$DYNAMIC
DIM file(1) AS STRING 'can change to be dynamic by using '$' instead of as clause
'$STATIC
file$ = "C:\windows\desktop\test.txt"
OPEN file$ FOR INPUT AS 1
DO
LINE INPUT #1, test$
lines = lines + 1
LOOP WHILE NOT EOF(1)
CLOSE 1
OPEN file$ FOR INPUT AS 1
REDIM file(lines)
FOR loader = 1 TO lines
LINE INPUT #1, file(loader)
IF file(loader) = "" THEN file(loader) = " "
NEXT loader
CLOSE 1
FOR enforce = 1 TO lines
FOR check1 = 2 TO lines
tline$ = file(check1)
IF ASC(LCASE$(LEFT$(tline$, 1))) < ASC(LCASE$(LEFT$(file(check1 - 1), 1))) THEN SWAP file(check1), file(check1 - 1)
IF ASC(LCASE$(LEFT$(tline$, 1))) = ASC(LCASE$(LEFT$(file(check1 - 1), 1))) THEN
IF LEN(tline$) < LEN(file(check1 - 1)) THEN SWAP file(check1), file(check1 - 1)
IF LEN(tline$) = LEN(file(check1 - 1)) THEN
FOR check2 = 1 TO LEN(tline$)
IF ASC(LCASE$(MID$(tline$, check2, check2))) < ASC(LCASE$(MID$(file(check1 - 1), check2, check2))) THEN SWAP file(check1), file(check1 - 1)
NEXT check2
END IF
END IF
NEXT check1
NEXT enforce
OPEN file$ FOR APPEND AS 1
PRINT #1, blank$
PRINT #1, blank$
titlebar$ = "Alphabitazed by Jehovah"
PRINT #1, titlebar$
PRINT #1, blank$
FOR printer = 1 TO lines
PRINT #1, file(printer)
NEXT printer
CLOSE 1
'You are free to change/destribute this file without giving me credit.
'all it does is load the file into a matrix, then go threw 'and see if the last line's first is less, if it is, then it swaps 'the two. the enforce loop is to make sure everything 'goes smoothly, but during testing, only moved blank 'spaces to the end of the file (top or bottom, don't 'know). as it is, it is not case sensitive. if you want it to 'be, you cannot just remove the lcase$ on all of the if 'statements. this is because ALL of the upper case 'alphabet comes before lower on the ascii table. to 'make it be case sensitiv, you must make it so that 'when it encounters 2 like values, it finds wich is less 'without the lcase$, if they are the same, don't swap, if 'one is then swap in the respective direction. this 'program was only tested on small lists since I am lazy 'and did not want to spend time on testing 7 minuts
'worth of code (that's 'bout how long it took). I will 'admit, this took a little more thought then I expected it 'too since I have never done it. But it was still wrather 'easy. If you need more help on the ascii table or I/O
'feel free to ask since I use both quit often in my 'programs.
'$DYNAMIC
DIM file(1) AS STRING 'can change to be dynamic by using '$' instead of as clause
'$STATIC
file$ = "C:\windows\desktop\test.txt"
OPEN file$ FOR INPUT AS 1
DO
LINE INPUT #1, test$
lines = lines + 1
LOOP WHILE NOT EOF(1)
CLOSE 1
OPEN file$ FOR INPUT AS 1
REDIM file(lines)
FOR loader = 1 TO lines
LINE INPUT #1, file(loader)
IF file(loader) = "" THEN file(loader) = " "
NEXT loader
CLOSE 1
FOR enforce = 1 TO lines
FOR check1 = 2 TO lines
tline$ = file(check1)
IF ASC(LCASE$(LEFT$(tline$, 1))) < ASC(LCASE$(LEFT$(file(check1 - 1), 1))) THEN SWAP file(check1), file(check1 - 1)
IF ASC(LCASE$(LEFT$(tline$, 1))) = ASC(LCASE$(LEFT$(file(check1 - 1), 1))) THEN
IF LEN(tline$) < LEN(file(check1 - 1)) THEN SWAP file(check1), file(check1 - 1)
IF LEN(tline$) = LEN(file(check1 - 1)) THEN
FOR check2 = 1 TO LEN(tline$)
IF ASC(LCASE$(MID$(tline$, check2, check2))) < ASC(LCASE$(MID$(file(check1 - 1), check2, check2))) THEN SWAP file(check1), file(check1 - 1)
NEXT check2
END IF
END IF
NEXT check1
NEXT enforce
OPEN file$ FOR APPEND AS 1
PRINT #1, blank$
PRINT #1, blank$
titlebar$ = "Alphabitazed by Jehovah"
PRINT #1, titlebar$
PRINT #1, blank$
FOR printer = 1 TO lines
PRINT #1, file(printer)
NEXT printer
CLOSE 1