This code is not optimized, it's a beginner's tutorial PB (for new users in PB)
Code: Select all
; Read Log 2.1
; (Quick GUI version)
;
; Changes:
; + Start array at 1
; + Add 'Case default' if line don't match expected value (line will be skipped)
; + Add a second array with fload values version (all decimal digits)
; + Add a log view (show all original lines)
; Leave PB assign numbers for handles
Enumeration
#FileHandle
#Window_0
#Grid_1
#Grid_2
#Grid_3
#All_Lines
EndEnumeration
n = 76
Dim AllLines$(n) ; Log file
Dim Array1$(n) ; First column string data
Dim Array2$(n) ; Second column string data
Dim DM$ (n, n) ; Second part: number stored as string (fixed decimal)
Dim DM.f (n, n) ; Second part: number as number (float)
DataFile$ = "example.txt"
; ReadFile instead of OpenFile can open file (readonly) event if shared (windows only)
If ReadFile(#FileHandle, DataFile$)
While Not Eof(#FileHandle)
TmpLine$ = ReadString(#FileHandle)
id = Asc( Left(TmpLine$, 1) ) ; ASCII value of first char of line
i + 1 ; increment i (can be write as i = i + 1)
AllLines$(i) = TmpLine$
Select id
Case 34
; First char is Double-quote, so fill array 1 and 2
; Trim (string, chr(34) while remove "" at beging and end of string
; (double Trim() on array2 because "" and space)
D1 + 1
Array1$(D1) = Trim( StringField( TmpLine$, 1, "," ), Chr(34) )
Array2$(D1) = Trim( Trim( StringField( TmpLine$, 2, "," ), Chr(34) ) )
Case 48 To 57
; First char is a Number (0 to 9)
RTrim(TmpLine$) ; remove spaces at end of line
k = 1
D2 + 1
For j = 0 To CountString(TmpLine$, " ")
DM$(D2, j) = StringField( TmpLine$, k, " " )
DM (D2, j) = ValF( StringField( TmpLine$, k, " " ) )
k + 1
Next
Default
; What else ?
Debug "Skip line #" + RSet(Str(i), 2, "0") + ": >" + TmpLine$ + "<"
EndSelect
Wend
CloseFile(#FileHandle)
Else
MessageRequester("Oh-oh", "Can't find data file " + DataFile$, 48)
End
EndIf
; Let's go draw a window to show datas
; Not the best way, but a lite tutorial, to explain how to set a minimal window in PB ;-)
; Draw the main window
OpenWindow(#Window_0, 0, 0, 1000, 800, "Results",
#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
; Draw the grid 1
ColWidth = 250
ListIconGadget(#Grid_1, 10, 10, 780, 300, "#", 20, #PB_ListIcon_GridLines )
AddGadgetColumn(#Grid_1, 1, "Array 1", ColWidth)
AddGadgetColumn(#Grid_1, 2, "Array 2", ColWidth)
; Draw the grid 2 (string version)
ColWidth = 60
ListIconGadget(#Grid_2, 10, 320, 780, 190, "#", 20, #PB_ListIcon_GridLines )
AddGadgetColumn(#Grid_2, 01, "DM 01", ColWidth)
AddGadgetColumn(#Grid_2, 02, "DM 02", ColWidth)
AddGadgetColumn(#Grid_2, 03, "DM 03", ColWidth)
AddGadgetColumn(#Grid_2, 04, "DM 04", ColWidth)
AddGadgetColumn(#Grid_2, 05, "DM 05", ColWidth)
AddGadgetColumn(#Grid_2, 06, "DM 06", ColWidth)
AddGadgetColumn(#Grid_2, 07, "DM 07", ColWidth)
AddGadgetColumn(#Grid_2, 08, "DM 08", ColWidth)
AddGadgetColumn(#Grid_2, 09, "DM 09", ColWidth)
AddGadgetColumn(#Grid_2, 10, "DM 10", ColWidth)
AddGadgetColumn(#Grid_2, 11, "DM 11", ColWidth)
AddGadgetColumn(#Grid_2, 12, "DM 12", ColWidth)
; Draw the grid 3 (float version)
ListIconGadget(#Grid_3, 10, 520, 780, 270, "#", 20, #PB_ListIcon_GridLines )
AddGadgetColumn(#Grid_3, 01, "DM 01", ColWidth)
AddGadgetColumn(#Grid_3, 02, "DM 02", ColWidth)
AddGadgetColumn(#Grid_3, 03, "DM 03", ColWidth)
AddGadgetColumn(#Grid_3, 04, "DM 04", ColWidth)
AddGadgetColumn(#Grid_3, 05, "DM 05", ColWidth)
AddGadgetColumn(#Grid_3, 06, "DM 06", ColWidth)
AddGadgetColumn(#Grid_3, 07, "DM 07", ColWidth)
AddGadgetColumn(#Grid_3, 08, "DM 08", ColWidth)
AddGadgetColumn(#Grid_3, 09, "DM 09", ColWidth)
AddGadgetColumn(#Grid_3, 10, "DM 10", ColWidth)
AddGadgetColumn(#Grid_3, 11, "DM 11", ColWidth)
AddGadgetColumn(#Grid_3, 12, "DM 12", ColWidth)
; Draw "log" (all lines)
ListIconGadget(#All_Lines, 800, 10, 190, 780, "#", 20, #PB_ListIcon_GridLines)
AddGadgetColumn(#All_Lines, 01, "Original File", 165)
; Now, fill the grids
; each row will be feed by a string
; PB change column at each chr$(10) in string
; Fill Grid 1 with array 1 and 2
For i = 1 To n
AddGadgetItem(#Grid_1, i, Str(i) + Chr(10) + Array1$(i) + Chr(10) + Array2$(i))
Next
; Fill Grid 2 with matrix
For i = 1 To n
AddGadgetItem(#Grid_2, i, Str(i) + Chr(10) + DM$(i, 0) + Chr(10) + DM$(i, 1) + Chr(10) +
DM$(i, 2) + Chr(10) + DM$(i, 3) + Chr(10) + DM$(i, 4) + Chr(10) +
DM$(i, 5) + Chr(10) + DM$(i, 6) + Chr(10) + DM$(i, 7) + Chr(10) +
DM$(i, 8) + Chr(10) + DM$(i, 9) + Chr(10) + DM$(i, 10) + Chr(10) +
DM$(i, 11) + Chr(10) + DM$(i, 12))
Next
; Fill Grid 3 with matrix
For i = 1 To n
AddGadgetItem(#Grid_3, i, Str(i) + Chr(10) + DM(i, 0) + Chr(10) + DM(i, 1) + Chr(10) +
DM(i, 2) + Chr(10) + DM(i, 3) + Chr(10) + DM(i, 4) + Chr(10) +
DM(i, 5) + Chr(10) + DM(i, 6) + Chr(10) + DM(i, 7) + Chr(10) +
DM(i, 8) + Chr(10) + DM(i, 9) + Chr(10) + DM(i, 10) + Chr(10) +
DM(i, 11) + Chr(10) + DM(i, 12))
Next
; Tips: in PB IDE, CTRL+D duplicate line (or selected bloc)
; Show all lines (for info)
For i = 1 To n
AddGadgetItem(#All_Lines, i, Str(i) + Chr(10) + AllLines$(i))
Next
; Main loop (wait for user to close it with closebox)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
ForEver
End