; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2479&highlight= ; Author: NicTheQuick ; Date: 06. October 2003 ; Save linked list in a file... ; LinkedList in Datei speichern: ; Ich habe eine Liste die ich durch eine Structur definiert habe. Wie kann ich diese in eine Datei speichern und wieder auslesen. Structure ValueStructure Long.l Word.l Byte.l Float.f EndStructure Structure StringStructure String1.s String2.s String3.s EndStructure NewList ValueLinkedList.ValueStructure() NewList StringLinkedList.StringStructure() Enumeration #SaveFile EndEnumeration Procedure SaveLinkedList_Value(*FirstElement, StructureSize.l, File.s) Protected *PosLL If CreateFile(#SaveFile, File) *PosLL = *FirstElement Repeat WriteData(*PosLL, StructureSize) *PosLL = PeekL(*PosLL - 8) + 8 Until *PosLL = 8 CloseFile(#SaveFile) EndIf EndProcedure Procedure LoadLinkedList_Value(StructureSize.l, File.s) If ReadFile(#SaveFile, File) ClearList(ValueLinkedList()) While Eof(#SaveFile) = 0 AddElement(ValueLinkedList()) ReadData(@ValueLinkedList(), StructureSize) Wend CloseFile(#SaveFile) EndIf EndProcedure Procedure SaveLinkedList_String(*FirstElement, StructureSize.l, File.s) Protected *PosLL, StringPos.l, StringLength.l, StringAddress.l If CreateFile(#SaveFile, File) *PosLL = *FirstElement Repeat For StringPos = 0 To StructureSize - 1 Step 4 StringAddress = PeekL(*PosLL + StringPos) StringLength = Len(PeekS(StringAddress)) WriteLong(StringLength) WriteData(StringAddress, StringLength) Next *PosLL = PeekL(*PosLL - 8) + 8 Until *PosLL = 8 CloseFile(#SaveFile) EndIf EndProcedure Procedure LoadLinkedList_String(File.s) Protected StringPos.l, StringLength.l If ReadFile(#SaveFile, File) ClearList(StringLinkedList()) While Eof(#SaveFile) = 0 AddElement(StringLinkedList()) For StringPos = 1 To 3 StringLength = ReadLong() Select StringPos Case 1 StringLinkedList()\String1 = Space(StringLength) ReadData(@StringLinkedList()\String1, StringLength) Case 2 StringLinkedList()\String2 = Space(StringLength) ReadData(@StringLinkedList()\String2, StringLength) Case 3 StringLinkedList()\String3 = Space(StringLength) ReadData(@StringLinkedList()\String3, StringLength) EndSelect Next Wend CloseFile(#SaveFile) EndIf EndProcedure ;- Values For a.l = 0 To 200 Step 4 AddElement(ValueLinkedList()) ValueLinkedList()\Long = a ValueLinkedList()\Word = a + 1 ValueLinkedList()\Byte = a + 2 ValueLinkedList()\Float = a / 10 Next FirstElement(ValueLinkedList()) SaveLinkedList_Value(@ValueLinkedList(), SizeOf(ValueStructure), "tempvalues.dat") LoadLinkedList_Value(SizeOf(ValueStructure), "tempvalues.dat") ResetList(ValueLinkedList()) ForEach ValueLinkedList() Debug ValueLinkedList()\Float Next ;- Strings For a.l = 0 To 200 Step 3 AddElement(StringLinkedList()) StringLinkedList()\String1 = "abc: " + Str(a) StringLinkedList()\String2 = Str(a + 1) + "abcdefghijklmnopqrstuvwxyz" StringLinkedList()\String3 = "Diese Strings wurden alle gespeichert" Next FirstElement(StringLinkedList()) SaveLinkedList_String(@StringLinkedList(), SizeOf(StringStructure), "tempstrings.dat") ClearList(StringLinkedList()) LoadLinkedList_String("tempstrings.dat") ResetList(StringLinkedList()) ForEach StringLinkedList() Debug StringLinkedList()\String2 Next ; ExecutableFormat=Windows ; FirstLine=1 ; EOF