Ignore me. I fixed it, I was talking rubbish, the following code works fine.
Strict
Type TSetting
Field name:String
Field val:String
End Type
Type TSettingsFile
Field settings:TList
Method New()
settings = New TList
End Method
Method addSetting(sName:String, sVal:String)
Local newSetting:TSetting = New TSetting
newSetting.name = sName
newSetting.val = sVal
ListAddLast self.settings, newSetting
End Method
Method SaveToFile(sFileName:String)
Local s:TSetting
For s = EachIn self.settings
Print s.Name + " = " + s.Val
Next
End Method
End Type
Local file:TSettingsFile = New TSettingsFile
file.addSetting("swers","kk132")
file.addSetting("sdsfs","kdsfk2")
file.addSetting("ssdfewrs","kfdk")
file.SaveToFile("")
your problem must be somewhere else.
The following code works with BM 1.06 (win beta) without any problems
Strict
Type TSetting
Field name:String
Field val:String
End Type
Type TSettingsFile
Field settings:TList
Method New()
settings = New TList
End Method
Method SaveToFile(sFileName:String)
For Local s:TSetting = EachIn settings
Print s.Name + " = " + s.Val
Next
End Method
End Type
Local a:TSetting = New TSetting
a.name = "bla"
a.val = "trala"
Local file:TSettingsFile = New TSettingsFile
file.settings.addlast(a)
file.savetofile ("a")
Delay 2000
End
Thanks Dremora, I have similar code that doenst work, but as what I just typed in does, I must be being stupid in my other project. Will post again if I have further issues.
Cheers,a
Ok Here is the faulty code
Type tFRSetting
Field id:String
Field value:String
End Type
Type tFRFile
Field id:String
Field fileName:String
Field settings:TList
' // Constructor //
Method New()
Self.settings = CreateList()
End Method
Function getSetting(name:String)
End Function
Function setSetting(name:String, newValue:Object)
End Function
Function loadRaw(sFileName:String)
Local sLine:String
Local sSettingName:String
Local sSettingValue:String
Local iEquals:Int
Local strmFile:TStream = ReadFile(sFileName)
If Not strmFile Then
Print "ERROR: FileReader - No Stream for file " + sFileName
Return
End If
While Not Eof(strmFile)
sLine = ReadLine(strmFile)
sLine = Trim(sLine)
If Left(sLine,1) <> ";" Then
iEquals = Instr(sLine, "=", 1)
sSettingName = Left(sLine, iEquals -1)
sSettingValue = Mid(sLine, iEquals +1)
' // Get rid of any trailing semi-colons //
If Right(sSettingValue, 1) = ";" Then
sSettingValue = Left(sSettingValue, Len(sSettingValue) -1)
End If
' // Create setting object //
Local newSetting:tFRSetting = New tFRSetting
newSetting.id = sSettingName
newSetting.value = sSettingValue
' // Add this new setting object to the file class //
ListAddLast Self.settings, newSetting
End If
Wend
CloseStream strmFile
End Function
Function saveFile(fileName:String)
Local strmFile:TStream
Local s:tFRSetting
strmFile = WriteFile(fileName)
For s = EachIn self.Settings
WriteLine strmFile, s.id + "=" + s.value + ";"
Next
CloseStream strmFile
End Function
End Type
Function FRLoadFile:tFRFile(fileName:String)
Local newFile:tFRFile = New tFRFile
newFile.fileName = fileName
newFile.loadRaw(fileName)
Return newFile
End Function
Print " Module: FileReader Loaded"
Whats going on there.
Ok Found it, Sorry for wasting thread space, its because Im using Functions and not Methods inside the Types when Im not returning anything, schoolboy error! My bad.
Although, shouldnt I get a "no return value found" when I declare them?
Cheers,
A
The return isn't a problem
Problem is that Function can not access Fields defined as it works on "type scope" and not "instance scope" so the only thing it knows of within a type is global and const.
for working on instance scope you have to use method as you already realized :)
return is no problem. wrong return types etc would give you an error as many other things would too (especially in strict)
Ah Of course, that makes perfect sense and I should bash my head against something until it hurts.
Thanks Dreamora for the explanation, I really should have realised that one myself.
Ta
A