You are not logged in.
Pages: 1
Hey!
I thought a thread where you can post some generic sources would be cool and useful.
So I start with a source to read a number out of a textfile.
Generaly it converts a string to an integer... You can modify this to get a StrToI function.
Notes: Create a file and write a number in ".." (Example: "123") it. The Source finds out the start (") and reads the number. if it founds " it returs the read numbers as an integer. If it founds an illegal character it should simply continue calculation.
// --== SCM STRING TO INT CONVERTER ==--
// ---=== (C)2008 - by Aschratt ===---
// ----==== ALL RIGHTS RESERVED ====----
// This function reads a value in ".." out of a file and returns the number as an integer
{$CLEO}
//Your Source
0050: gosub @CONVERT
//Additional Source. 10@ contains the value now.
:CONVERT
0006: 0@ = 0 //File handle
0006: 10@ = 0 //Read buffer
0006: 1@ = 0 //result
:CONVERT_START
0A9A: 0@ = openfile ".\CLEO\blah.ini" mode 0x6272 // Binary Read (TextReading only used for complete strings)
:CONVERT_LOOP_01 //Searching " for starting
0001: wait 0 ms
0A9D: readfile 0@ size 1 to 10@ // store 1 byte to the buffer
00D6: if 0
0039: 10@ == 34 // '"'
004D: jump_if_false @CONVERT_LOOP_01
:CONVERT_LOOP_02
0001: wait 0 ms
0A9D: readfile 0@ size 1 to 10@ // store 1 byte to the buffer
00D6: if 0
8039: not 10@ == 48 // '0'
004D: jump_if_false @CONVERT_CASE_0
00D6: if 0
8039: not 10@ == 49 // '1'
004D: jump_if_false @CONVERT_CASE_1
00D6: if 0
8039: not 10@ == 50 // '2'
004D: jump_if_false @CONVERT_CASE_2
00D6: if 0
8039: not 10@ == 51 // '3'
004D: jump_if_false @CONVERT_CASE_3
00D6: if 0
8039: not 10@ == 52 // '4'
004D: jump_if_false @CONVERT_CASE_4
00D6: if 0
8039: not 10@ == 53 // '5'
004D: jump_if_false @CONVERT_CASE_5
00D6: if 0
8039: not 10@ == 54 // '6'
004D: jump_if_false @CONVERT_CASE_6
00D6: if 0
8039: not 10@ == 55 // '7'
004D: jump_if_false @CONVERT_CASE_7
00D6: if 0
8039: not 10@ == 56 // '8'
004D: jump_if_false @CONVERT_CASE_8
00D6: if 0
8039: not 10@ == 57 // '9'
004D: jump_if_false @CONVERT_CASE_9
00D6: if 0
8039: not 10@ == 34 // '"'
004D: jump_if_false @CONVERT_END
0002: jump @CONVERT_LOOP_02 // illegal character -> GetNext
:CONVERT_END
0A9B: closefile 0@
0051: return
:CONVERT_CASE_0
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 0 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_1
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 1 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_2
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 2 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_3
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 3 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_4
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 4 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_5
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 5 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_6
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 6 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_7
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 7 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_8
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 8 // The number which was found
0002: jump @CONVERT_LOOP_02
:CONVERT_CASE_9
0012: 1@ *= 10 // Add one position to the end number
000A: 1@ += 9 // The number which was found
0002: jump @CONVERT_LOOP_02
Offline
Good, but the code need to be optimized.
How 'bout making a routine that will read a word from the file (until it meets a space sign #32), and store this word to a string variable. Say, I have a file with
Hello, world!
inside. Then I run this routine and it will store Hello, to some variable. The routine could have an additional parameter to specify which word I need: first, second, third, etc. In my example, Hello, is the first word and world! is the second. Also it could optionally skip everything except letters and numbers.
It will be useful to make a real routine StrToInt, that converts a string variable value to a number.
Then, to get a number from the file, I will run first routine with parameter 1, 2, etc and then the StrToInt.
Offline
Pages: 1