EachIn troubles

BlitzMax Forums/BlitzMax Beginners Area/EachIn troubles

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