Zakum Geschrieben 26. Dezember 2008 Teilen Geschrieben 26. Dezember 2008 (bearbeitet) Hallo allerseits. Bin gerade eben auf ein eher theoretisches Problem gestoßen und mir fällt kein cleverer Ausweg ein- vielleicht kann ja jemand helfen. Ich möchte einen Verbund, der dynamische Arrays enthält in typisierten Dateien speichern, um so praktischer darauf zugreifen zu können. Der Verbund: user = record name:string[20]; saw: array of movie; favGenre: array of string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end; Die gewünschte Datei: var datei:file of user; Tja, nun liefert mir mein Freund der Compiler den Fehler: Type user needs finalization- not allowed in file type Ertappt! Mein saw ist dynamisch, damit unterscheiden sich also die User in ihrer Größe von einander... Lässt sich hier trotzdem irgendwie der "file of user" verwenden? Ich würde nur ungern auf TextFile umsteigen. Vielleicht kennt ja jemand nen Ausweg, oder weiß das dies unmöglich ist? Wäre für jeden Hinweis dankbar. Ciao Zakum Bearbeitet 26. Dezember 2008 von Zakum Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 29. Dezember 2008 Teilen Geschrieben 29. Dezember 2008 Hallo Zakum, ich hätte einen Lösungsansatz. userfile = record index:string[12]; name:string[20]; saw: movie; favGenre: string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end; Hast Du jetzt zwei Einträge - Array von Länge 2 - so musst Du zwei Einträge speichern jeweils mit dem gleichen Index - Index könnte Datum + Uhrzeit sein, hängt davon ab wie schnell du Daten erzeugst. Du kannst ja einen zweiten Typ anlegen der so ist: (wie der von Dir zuvor definierte) userram = record name:string[20]; saw: array of movie; favGenre: array of string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end; und dann eine Routine schreiben welche die Daten von userfile in den userram umwandelt und zurück. Anhand des Indexes könntest Du dann erkennen welche Einträge zusammengehören. Hoffe das ich meinen Gedankengang ausreichend gut in Wortform gebracht habe. Der Fehler müsste doch für favGenre auch kommen, oder nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zakum Geschrieben 31. Dezember 2008 Autor Teilen Geschrieben 31. Dezember 2008 Ja, ich nehme an, ich habe die Idee verstanden. Clever gelöst! :uli Ich glaube aber, das kann ich in dem Kontext nicht umsetzen: Das ganze soll eine Content Providing Unit werden, in array of movies werden also alle Filme gespeichert, die ein User bereits gesehen hat. Auf dieser Basis soll das Programm dann Vorschläge für Filme liefern, die den User gefallen könnten. Da für jeden Film (für jeden User) eine neue Datei zu speichern, würde wohl schnell in Chaos ausarten. Aber den Trick merk' ich mir, der ist ziemlich praktisch! Ist ja nicht das erste mal, das ich auf ein Finalization Problem stoße, und bestimmt nicht das Letze. Mit sivestrigen Grüßen, Zakum Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 1. Januar 2009 Teilen Geschrieben 1. Januar 2009 Hi, [...] Da für jeden Film (für jeden User) eine neue Datei zu speichern, würde wohl schnell in Chaos ausarten. [...] also eigentlich dachte ich das Du da nur eine Datei hast. Beispiel: name movie mov-index user001 abc 0001 user001 abc dek 0002 user001 def 0003 user039 akc 0001 user040 dkeu 0001 user001 dkudi 0004 jetzt muss halt die "einlese-funktion" die einzelnen Datensätze lesen und in das dafür vorgesehene Array speichern. userram = record name:string[20]; saw: array of movie; end; ungefähr so: userram.name = "user001 " for zeile in datei.txt do begin // angenommen du willst nur die daten von user001 if userfile.name = userram.name begin // weiteren Platz für Array-Element schaffen setlength(userrram.saw, high(userram.saw)+1) // daten ablegen userram.saw[High(userram.saw)].name := userfile.movie end; end; Wie mir soeben auffällt braucht man den Index nicht wirklich , aber egal. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.