Mehrere Datein mit einem ÖffnenDialog

Für Fragen von Einsteigern und Programmieranfängern...
Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Mehrere Datein mit einem ÖffnenDialog

Beitrag von Socke »

Ich habe mir mal erlaubt, deinen Code ein wenig zu kommentieren.:

Code: Alles auswählen

var Datei : File of Gesamte_Fragen; // Die Variable sollte nur in der Methode TPerformancePusher.DateiLaden; verwendet werden. Also gehört sie auch dort hin.
 
procedure TPerformancePusher.DateiLaden;
var i : integer;
begin
 for i := 0 to DateiName.count -1 do
 begin
   AssignFile(Datei, DateiName[i]);
   {$I-}Reset(Datei);
  { Hier noch mal die Frage von Oben:
    Wie kommst du auf die Idee, dass die Variable Fragenkatalog genug Speicherplatz besitzt?}
   Read(Datei, Fragenkatalog[i]);
// [...]
 
Inventio hat geschrieben:Jedoch bekomme ich in der Runtime des Programms dann meine programmierte Fehlermeldung, er konnte also keine Datei laden... Was mache ich falsch ?
Stelle dir diese Fragen: Welchen Wert hat IOResult und welche Datei wolltest du öffnen? Existiert diese Datei?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Mehrere Datein mit einem ÖffnenDialog

Beitrag von m.fuchs »

Inventio hat geschrieben:
m.fuchs hat geschrieben:Um es noch weiter zu präzisieren: Hast du irgendwo die Größe des Arrays auf einen Wert gesetzt, der garantiert nicht kleiner als die Anzahl der vom Benutzer ausgewählten Dateien ist?

Oder fehlt vielleicht einfach vor deiner For-Schleife folgende Zeile:

Code: Alles auswählen

SetLength(DateiName, OpenDialog1.Files.Count)
Ich habe es jetzt mit einer TStringList gelöst, das passt! Danke für eure Hilfe!
Trotzdem solltest du für dich selber eine Antwort auf meine Frage suchen. Das mag jetzt oberlehrerhaft und kleinkariert sein, aber wenn du die TStringList als Lösung benutzt und dir das dafür aber nicht klar ist wo dein ursprünglicher Fehler liegt, hast du nichts gewonnen. Wird deine StringList eigentlcih auch irgendwo wieder freigegeben? Wie stellst du sicher dass kein Speicherleck auftritt. In dem von dir geposteten Codeschnipsel, deute nix darauf hin.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Inventio
Beiträge: 39
Registriert: So 21. Mär 2010, 14:00

Re: Mehrere Datein mit einem ÖffnenDialog

Beitrag von Inventio »

Ich bin noch am Überlegen, warum es mit der Array of String Methode nicht funktioniert hat, da es ja dynamisch erweitert werden kann, ich also an die n+1te stelle ein neues element erstellen kann.
Da DateiName durch die .add Methode ja problemlos erweitert werden kann, kann ich mir auch sicher sein, dass der Speicherplatz existiert.
Durch die Opftion OfFileMustExist im Opendialog kann ich mir auch sicher sein, dass die Pfade, die in DateiName erstellt werden, valide sind.

Die DateiÖffnen Prozedur hab ich von meiner Alten Prozedur abgewandelt,

Code: Alles auswählen

AssignFile(Datei, DateiName); //Damals noch ein einfacher string, da es ja auch nur einen Pfad gab.
Reset(Datei,)
Readln(Datei, Fragebogen); //Damals ja nur ein Fragebogen, da es ja auch nur eine Datei gab und ich kein Array von Fragebögen gebraucht habe;
//Diesen Teil habe ich so aus einem Beispiel genommen, desegen weiß ich auch nicht genau, was ioresult liefert.
if ioresult <> 0 then Showmessage('Error');
Closefile(Datei);
So sah das aus, bevor ich da drin "rumgefuscht" habe.
Wie ich auf die Idee kam, dass mein aktueller Code (Wie im vorherigen post gezeigt) funktioniert.
Mit AssingFile weise ich ja der Variable Datei den durch den Opendialog ermittelten Pfad zu.
Dann setze ich die Datei zurück und mache sie Lesbar und durch Readln Datei lese ich sie in den Fragebogen ein. Dies wollte ich jetzt auch iterativ mit der For-Schleife lösen, die von 0 bis zu Count -1 läuft, also für alle gewünschten Pfade durchgegangen wird. Ich weise nun also nichtehr nur einfach den String zu, sondern DateiName, also das i-te Element in meiner TStringList. Diesen Pfad lese ich jetzt an die dazugehörige i-te Stelle in meinem FragenKatalog, der an jeder Stelle ja einen Fragebogen hat.
Ich sehe hier echt keinen Fehler, warum das einlesen der Datei auf diese Weise nicht klappen soll...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Mehrere Datein mit einem ÖffnenDialog

Beitrag von m.fuchs »

Inventio hat geschrieben:Ich bin noch am Überlegen, warum es mit der Array of String Methode nicht funktioniert hat, da es ja dynamisch erweitert werden kann, ich also an die n+1te stelle ein neues element erstellen kann.
Das habe ich dir hier schon gesagt. Da steht dann auch die Lösung. :wink:
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Inventio
Beiträge: 39
Registriert: So 21. Mär 2010, 14:00

Re: Mehrere Datein mit einem ÖffnenDialog

Beitrag von Inventio »

Und für das Problem, dass sich jetzt noch ergibt? Dass ist die Datein nicht iterativ einlesen kann ? Eben das was ich weiter oben beschrieben hab ?

Antworten