Datei laden un Zeilen zählen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Nugi89
Beiträge: 68
Registriert: Do 26. Feb 2015, 13:46

Re: Datei laden un Zeilen zählen

Beitrag von Nugi89 »

hab mal den Test gemacht. leider bekomme ich als Meldung das die Datei nicht existiert.
ich stell am Besten mal den gesamten Quellcode rein.

Code: Alles auswählen

procedure TForm1.Bt_CountClick(Sender: TObject);
var
  anzahl : integer;
  path: string;
  datei: TStringList;
begin
  datei:= TStringList.Create;
  path:= Edit_Path.Text;
 
  if FileExists(path) = true then
  begin
    datei.LoadFromFile(path)
    Edit_Anzahl.Text:= IntToStr(datei.Count);
  end:
  else
  begin
    showMessage('nicht vorhanden!')
  end;
end;


Hier ist die zweite Prozedur in der ich den Pfad lade

Code: Alles auswählen

procedure TForm1.Edit_PathClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Edit_Path.Text:= OpenDialog1.FileName;
  end;
end;

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Nugi89 hat geschrieben:Und ja ich kann die Datei mit einem anderen Programm öffnen.

hab mal den Test gemacht. leider bekomme ich als Meldung das die Datei nicht existiert.

Das widerspricht sich. Bist du sicher, dass der Pfad der "mit einem anderen Program" geöffneten Datei exakt dem Wert der "path" Variable entspricht?
Falls ja, laufen beide Programme mit denselben user-Rechten? "c:\User\Admin\..." erscheint verdächtig, funkt da etwa ein Virenschutz hinein? Versuche doch einmal mit einem weniger geschützten Verzeichnis.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Datei laden un Zeilen zählen

Beitrag von Michl »

Ich kann dir zwar keine Datei an die Stelle kopieren und auch die Prüfung, ob der Pfad und der Dateiname korrekt ist, nicht machen, aber dir einen Ratschlag geben: ich würde dir empfehlen einen Dateinamen (FileName) auch als solchen zu benennen und nicht als Pfad (Path). Das schafft nur Verwirrung.

Falls wirklich eine Datei an diesem Ort mit diesem Namen existiert und du diese nicht öffnen kannst, liegt das evtl. an den unzureichenden Rechten deines Projektes. Du könntest noch probieren unter Projekt -> Projekteinstellungen -> Anwendung -> Ausführungsebene -> höchste verfügbare oder benötigt Administrator zu wählen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Michl hat geschrieben:Ich kann dir zwar keine Datei an die Stelle kopieren und auch die Prüfung, ob der Pfad und der Dateiname korrekt ist, nicht machen, aber dir einen Ratschlag geben: ich würde dir empfehlen einen Dateinamen (FileName) auch als solchen zu benennen und nicht als Pfad (Path). Das schafft nur Verwirrung.

Bringt "OpenDialog1.FileName" lediglich den Dateinamen und keinen kompletten Pfad? Dann würde natürlich eine Datei ausserhalb des aktuellen Verzeichnisses nicht gefunden...

@Nugi89: Setze doch einen Breakpoint in die "if FileExists(path) = true then"-Zeile und prüfe ob der Wert der Variable "path" deinen Erwartungen entspricht.
Zuletzt geändert von mse am Mo 14. Sep 2015, 14:35, insgesamt 1-mal geändert.

Nugi89
Beiträge: 68
Registriert: Do 26. Feb 2015, 13:46

Re: Datei laden un Zeilen zählen

Beitrag von Nugi89 »

es handelt sich hier nur um ein Programm. Sprich die zwei Prozeduren gehören in dieses Programm.
Eine andere Datei aus einem anderen Verzeichnis zu laden geht und ich kann bei dieser Datei auch die Zeilen zählen.
Nur aus dem Verzeichnis nicht, indem mein Projekt abgelegt ist welches ich dazu verwenden, kann zwar den Pfad laden aber nicht die Zeilen zählen.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Datei laden un Zeilen zählen

Beitrag von Michl »

mse hat geschrieben:Bringt "OpenDialog1.FileName" lediglich den Dateinamen und keinen kompletten Pfad? Dann würde natürlich eine Datei ausserhalb des aktuellen Verzeichnisses nicht gefunden...
Nein, brint den kompletten Filenamen, incl. Pfad. Für mich ist ein Pfad nur ein Pfad ohne Dateiname - daher der Hinweis (ich extrahiere regelmäßig mit aPath := ExtractFilePath(aOpenDialog.FileName) den entsprechenden Pfad).

mse hat geschrieben:@Nugi89: Setze doch einen Breakpoint in die "if FileExists(path) = true then"-Zeile und prüfe ob der Wert der Variable "path" deinen Erwartungen entspricht.
+1
Zuletzt geändert von Michl am Mo 14. Sep 2015, 14:40, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Nugi89 hat geschrieben:es handelt sich hier nur um ein Programm. Sprich die zwei Prozeduren gehören in dieses Programm.

Erstes Program: Das Program von dem du schreibst
Und ja ich kann die Datei mit einem anderen Programm öffnen.

Zweites Programm: Dein Programm.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Michl hat geschrieben:Für mich ist ein Pfad nur ein Pfad ohne Dateiname - daher der Hinweis (ich extrahiere regelmäßig mit aPath := ExtractFilePath(aOpenDialog.FileName) den entsprechenden Pfad).

Das ist glaube ich nicht allgemeingültig. Für mich ist "path" eine vollständige Dateibezeichnung vom Wurzelverzeichnis bis zur Dateiendung.

Edit:
Falsch, das wäre "absolute path".
Zuletzt geändert von mse am Mo 14. Sep 2015, 15:44, insgesamt 1-mal geändert.

Nugi89
Beiträge: 68
Registriert: Do 26. Feb 2015, 13:46

Re: Datei laden un Zeilen zählen

Beitrag von Nugi89 »

ich weis gerade nicht wie ich euch das verständlicher erklären kann :oops:
Deswegen versuch ich es von Neuem. ^^

Also mein Programm soll lediglich einen Dateipfad laden und bei der ausgewählten Datei die Zeilen zählen.
So wie ich es mittlerweile habe funktioniert es auch, nur ich kann bei den Dateien, welche in dem Verzeichnis des Programmes liegen nicht die Zeilen zählen. Warum?

ich hoffe das ist jetzt etwas verständlicher.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Nugi89 hat geschrieben:ich hoffe das ist jetzt etwas verständlicher.

Das haben wir schon verstanden. ;-)
Bitte lies nochmal die letzten paar Beiträge.

Nugi89
Beiträge: 68
Registriert: Do 26. Feb 2015, 13:46

Re: Datei laden un Zeilen zählen

Beitrag von Nugi89 »

ich hab es jetzt mal mit ExtractFilePath() versucht und mir den Inhalt mal ausgeben lassen. Da fehlt aber dann die eigentliche Datei die ich ausgewählt habe.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Datei laden un Zeilen zählen

Beitrag von Michl »

mse hat geschrieben:Das ist glaube ich nicht allgemeingültig. Für mich ist "path" eine vollständige Dateibezeichnung vom Wurzelverzeichnis bis zur Dateiendung.
Ja, da hast du wohl recht.

@Nugi89: versuchs mal so:

Code: Alles auswählen

    procedure TForm1.Bt_CountClick(Sender: TObject);
    var
      anzahl : integer;
      datei: TStringList;
    begin
      datei:= TStringList.Create;
 
      if OpenDialog1.Execute then
      begin
        Edit_Path.Text:= OpenDialog1.FileName;
        datei.LoadFromFile(path);
        Edit_Anzahl.Text:= IntToStr(datei.Count);
      end;
      Datei.free;
    end;
Das sollte eigentlich mit logischen und physikalischen Pfaden funktionieren.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Was ist mit:
mse hat geschrieben:@Nugi89: Setze doch einen Breakpoint in die "if FileExists(path) = true then"-Zeile und prüfe ob der Wert der Variable "path" deinen Erwartungen entspricht.

?

Nugi89
Beiträge: 68
Registriert: Do 26. Feb 2015, 13:46

Re: Datei laden un Zeilen zählen

Beitrag von Nugi89 »

@mse
das hatte soweit funktioniert

@Michl
Danke werde es mal ausprobieren.


Hab da noch eine Frage am Rande.
Wenn ich mit dem OpenDialog auf dem Desktop nach einer Datei suche und nach unten scrolle bekomme ich eine Exception:
RunError(217)
Gab es da irgendeine Problembehebung ?

Ich verwende Version 1.4RC2

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Datei laden un Zeilen zählen

Beitrag von mse »

Nugi89 hat geschrieben:@mse
das hatte soweit funktioniert

Was heisst das? Meinst du "Der Inhalt der Variable path ist exakt der Dateipfad den ich auch beim Test mit dem "anderen Programm" verwendet habe."?

Antworten