Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; *** BEFORE USING - MAKE A FILE CALLED 'TEXT.TXT' ON THE C DRIVE AND WRITE A FEW RANDOM LINES OF TEXT WITH NOTEPAD ***
- ; TYPES OF VARIALBES
- ; Global means it can be used anywhere - omiting this means it's local
- ; the main variable types you will need are .a .s .i ('i' is automatic if not specified)
- ; **YOU ALWAYS DEFINE YOUR GLOBAL VARIABLES AT THE TOP TO AVOID CONFUSION**
- ; EXAMPLES
- ; NOTE: We won't use all of these variables in our code below - some are just examples.
- #THE_FILENAME = "C:\text.txt" ; this is a constant text string - constants are described later
- Global TheNumber = 1000 ; this is automatically an integer (for big numbers) by default because there's no '.i' period after it
- Global PushedButton.a = #False ; '.a' after means this uses 1 byte (either for true/false or for numbers 0 - 255). it's the smallest unit available
- Global TheText.s = "This is some text" ; you use '.s' to denote a text string variable
- ; AN ARRAY
- Global Dim TheTextLines.s(10, 10) ; this defines a 2D matrix (a.k.a. array) 10 by 10 of text strings
- ; how to use it
- TheTextLines(1, 1) = "thing" ; now position 1 by 1 equals 'thing'. you can also use 0 by 0 if you want. most things start at zero.
- Global Dim RealLines.s(0) ; this one is also an array, but with one dimension. it's zero because the size will be defined later - we don't know how much space we need yet
- ; LOCALS
- ; if you write a var without using global in front, it'll automatically be local
- TheTest.a = #True
- HappyFrank.s = "happy to be"
- ; EXAMPLES OF PROCEDURES
- ; these get called in your code below to use them - like 'LoadSomeText()'. it's used as if it's a built in command in the language.
- Procedure LoadSomeText()
- This_Is_A_Variable.a = 50 ; a local variable with a size of 1 byte - can store 0 to 255. it can't be used outside this procedure.
- ; you may use underscore or capitalization in your variable names, just NO SPACES.
- TheText = "this is some new text" ; this one we can access/change in here cause it's Global. we couldn't use HappyFrank in here though (we 'could', but it would be a new var that's cleared.)
- ; put whatever code you want in here
- EndProcedure
- ; these procs don't return anything. if it were to return something, you'd write 'Procedure.i' or 'Procedure.a' for example. SEE BELOW at the next procedure.
- Procedure AnotherProc()
- ; more stuff would go in here
- EndProcedure
- ; this proc will count the number of lines in a text file
- ; we need to use this below, you'll see
- ; FileNumber is a default '.i' that we pass into the procedure like a command parameter.
- Procedure.i CountFileLines(FileNumber) ; on a procedure '.i' should be defined if the proc is to return a value. it means this proc will return an integer number, but it could be any of the types.
- Lines = 0 ; automagically an integer cause no '.' after it
- Repeat
- Lines + 1 ; in PB (unlike other langs), we don't say 'Lines = Lines + 1' or 'Lines++' - it's more clear IMO.
- ReadString(FileNumber)
- Until Eof(FileNumber) = #True ; Eof means 'End Of File', so this loop repeats until the end of file has been reached.
- Lines - 1 ; we get one extra blank line at the bottom of the file, so -1 to ignore it
- FileSeek(FileNumber, 0) ; this sets our reading pointer back to the top of the file, so we can later start reading from the begining again.
- ProcedureReturn Lines
- EndProcedure
- ; MACROS
- ; macros are simply procs that are basically pasted in place of your code (where ever you write its name)
- ; whereas procs actually get referenced and the code jumps into it
- ; so if you use a long macro too often, it will bloat your code because it's pasting copies of it everywhere - in that case, use a procedure
- ; they are generally used to just make your code look better and more understandable below
- Macro BeginingOfFile()
- FileSeek(0, 0)
- EndMacro
- ; ANYTHING OUTSIDE OF/BELOW YOUR PROCS AND VARIABLE DECLARATIONS, IS THE MAIN ENTRY POINT OF YOUR PROGRAM
- ; so this is where the program starts executing.
- ; For example: This_Is_A_Variable - will not work here because it is local to the procedure called LoadSomeText()
- If ReadFile(0, #THE_FILENAME) ; opens this text file as file number zero. if you were to open more files, you'd put one, etc. if you are done and CloseFile(0), then you can re-use zero again.
- ; we count the number of lines in the file so that we know how big to make the array (1D matrix)
- Lines = CountFileLines(0) ; Lines = the integer returned by using our procedure above
- Dim RealLines.s(Lines) ; this is the array we defined above as 'Global' with a size of zero. we are now re-dimensioning it to the size in the variable 'Lines'
- For CurrentLine = 0 To Lines
- RealLines(CurrentLine) = ReadString(0) ; we read each line from the file and assign it to its proper position in the array
- Next
- BeginingOfFile() ; go back to the begining so we can do it again with a different example. the macro code is pasted here behind the scenes.
- #GOODLY_FILE = 0 ; this is an example of a constant. it's denoted with a hashtag. it's a pre-defined variable that can never change at run-time.
- ; you could use this constant instead of writing '0' for your file number everywhere. it's just to make your code more readable.
- ; Example: OpenFile(#GOODLY_FILE, "B:\text.txt") .... Lines = CountFileLines(#GOODLY_FILE)
- #ANOTHER_FILE = 1 ; if you know your numbers will always be in order... (in some instances you want constants with numbers out of order)
- ; you can use an Enumeration and that will automatically number them in order
- Enumeration ; enumerations are convenient because sometimes, you might want to remove an item from the list and not have to change all the following numbers to be in order.
- #FIRST_FILE ; they don't need to be capitalized, but this is the main convention
- #SECOND_FILE
- #THIRD_FILE
- EndEnumeration ; enumerations are very important when dealing with windows and their containing objects (gadgets in PB)...
- ; so you don't have to remember the object numbers AND can also insert more objects without changing all the subsequent ones.
- ; here is another way to read the lines that's much simpler and doesn't use a procedure like CountFileLines, but it's far slower
- Lines = 0
- Repeat
- RealLines(Lines) = ReadString(#GOODLY_FILE)
- Lines + 1
- ReDim RealLines.s(Lines) ; we are using ReDim here, instead of Dim. ReDim resizes the array and preserves its contents.
- ; so instead of counting the file lines first, we just resize the array once on each loop - slower and junky. to resize and preserve, the system...
- ; has to reallocate a new slightly larger chunk of ram and then copy the contents from the old array into the new larger memory space.
- ; use it sparingly and only when there is absolutely no way to determine the size of something beforehand like we did above.
- Until Eof(#GOODLY_FILE) = #True
- Lines - 1
- CloseFile(#GOODLY_FILE)
- ; display the lines
- For DisplayLine = 0 To Lines
- MessageRequester(TheText, RealLines(DisplayLine)) ; this shows each line of the array we read in a MessageBox (the term used in mainstream languages).
- Next
- Else
- MessageRequester(HappyFrank, "The file '" + #THE_FILENAME + "' could not be opened!", #PB_MessageRequester_Error) ; this is the same as MessageBox in VB.
- EndIf
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement