Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Datensätze unterschiedlich

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
roteo



Anmeldungsdatum: 31.07.2014
Beiträge: 15

BeitragVerfasst am: 08.08.2014, 09:28    Titel: Datensätze unterschiedlich Antworten mit Zitat

Hallo zusammen,

ich habe eine kleine Dateiverwaltung geschrieben, die zu Beginn alle Sätze in einen Array einliest und dann bearbeitet. Das Programm läuft auch gut.
Alle Dateien, die nötig sind, liegen in demselben Ordner. Rufe ich die IDE auf und starte das Programm von dort, liefert es aber andere Ergebnisse als wenn ich die EXE aufrufe. Es liegen dann unterschiedliche Datensätze und auch unterschiedliche viele Datensätze vor.
Wie geht das denn? Speichert die Exe zusätzlich in einem anderen Ordner ab? Das Programm enthält eine Funktion, die eine CSV zu erzeugt. Auch da habe ich unterschiedliche Ergebnisse.
Ich habe im Programm keine Pfade angegeben. Da solle doch alles im aktuellen Ordner landen, oder?

Kann mir das bitte mal jemand erklären? Ich danke euch.

Gruß, Roteo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 08.08.2014, 13:25    Titel: Antworten mit Zitat

Du müsstest auf jeden Fall sicherstellen, dass der Ausführungspfad gleich dem Dateipfad ist. Wie das die IDE handhabt, kann ich nicht sagen (eine gute IDE sollte den Pfad eigentlich korrekt setzen), und auch beim Direktstart der exe können manchmal lustige Dinge passieren, z. B. bei der Verwendung von Verknüpfungen, aber auch Programme, die direkt auf dem Desktop liegen, werden wohl nicht in jeder Windows-Version korrekt behandelt. Mein Linux-PCManFM händelt einen Direktstart auch immer mit dem falschen Dateipfad, keine Ahnung wieso.

Als Schnelllösung könntest du mal probieren, ob es hilft, ganz am Anfang des Programms folgende Zeile einzufügen:
Code:
CHDIR EXEPATH

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
roteo



Anmeldungsdatum: 31.07.2014
Beiträge: 15

BeitragVerfasst am: 08.08.2014, 21:06    Titel: Antworten mit Zitat

Hallo nemored,

vielen Dank erst einmal für deine Antwort. Ich werde das mal probieren. Das müsste dann aber heißen, dass irgendwo auf meinem Rechner noch eine solche Datei herumgeistert. Ich werde mal suchen... Vielleicht bringt mich das auch etwas weiter.

Grüße, Roteo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
roteo



Anmeldungsdatum: 31.07.2014
Beiträge: 15

BeitragVerfasst am: 10.08.2014, 10:05    Titel: Antworten mit Zitat

Hallo nemored,

leider hat das nicht den gewünschten Erfolg gehabt. Obwohl ich nur eine Datei finden kann, habe ich dennoch unterschiedliche Inhalte und unterschiedliche Datensatzanzahl. mit dem Kopf durch die Mauer wollen

Gruß, Roteo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.08.2014, 12:20    Titel: Besser immer vollständigen Pfad bei OPEN verwenden Antworten mit Zitat

Hallo,

anstelle mit CHDIR bei jeder Dateioperation zunächst das Arbeitsverzeichnis zu wechseln, würde ich direkt auf absolute (nicht fest codierte!) Pfade für OPEN setzen.

Sinnvoll wäre es beispielsweise, einmal irgendwo am Anfang des Programms eine "Konstante" aufzunehmen:
Code:
#define Speicherdatei EXEPATH+"/array.csv"

(Das ist keine Konstante im engeren Sinn (CONST), aber erfüllt den gleichen Zweck.)

Dann kannst du überall im Programm - egal, in welcher SUB oder FUNCTION - schreiben:
Code:
OPEN Speicherdatei FOR INPUT AS #1

oder
Code:
OPEN Speicherdatei FOR OUTPUT AS #1

Und du kannst sicher sein, dass die Datei immer an der gleichen Stelle gesucht / geschrieben wird, nämlich automatisch im gleichen Verzeichnis, wo die Programm-EXE liegt.

Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt.

Wenn man sicherstellen möchte, dass das Programm auch ohne solche Maßnahmen auf einem modernen System läuft, sollte man als Speicherort für solche Dateien einen Ordner wählen, den auch ein normaler User beschreiben darf. Zum Beispiel:
Code:
PRINT "Verzeichnis fuer Anwendungsdaten dieses Users:"
PRINT ENVIRON("APPDATA")
GETKEY: END


Das könnte man mit der Pfadkonstante (s.o.) kombinieren:
Code:
#define Speicherdatei ENVIRON("APPDATA")+"/array.csv"


Folgendes solltest du aber nicht machen:
Code:
OPEN "C:\MeinProgramm\datei.csv" FOR INPUT AS #1

Dann wäre dein Programm nur lauffähig, wenn es der User in exakt dieses Verzeichnis direkt unterhalb von C legt. In allen anderen Verzeichnissen wäre es nicht funktionsfähig. Das wäre eine ziemlich schlechte Lösung. Von daher sollte man immer Platzhalter wie EXEPATH oder ENVIRON("APPDATA") benutzen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
roteo



Anmeldungsdatum: 31.07.2014
Beiträge: 15

BeitragVerfasst am: 11.08.2014, 17:13    Titel: Antworten mit Zitat

Hallo Sebastian,

vielen Dank für deinen Tipp. Das kingt sehr logisch und ich werde es ausprobieren und melde mich dann wieder.

Gruß, Roteo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.08.2014, 22:22    Titel: Re: Besser immer vollständigen Pfad bei OPEN verwenden Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt.


Gilt allerdings auch schon für die älteren Windows-Versionen, da auch dort das Ziel immer sein muss, die Anwendung ohne erhöhte Berechtigungen verwenden zu können. Am besten noch passenden Ordner innerhalb vom %APPDATA% anlegen. Bei Linux auf $HOME zurückgreifen.

Unter

http://msdn.microsoft.com/en-us/library/windows/apps/hh465094.aspx

gibt es von Microsoft sogar offizielle Richtlinien für Windows-Anwendungen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 12.08.2014, 01:07    Titel: Re: Besser immer vollständigen Pfad bei OPEN verwenden Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Wichtig: Unter modernen Windows-Versionen (Vista / 7 / 8 / ...) hat ein normaler User keine Berechtigung, in Verzeichnisse unterhalb von "C:\Programme" oder "C:\Programme (x86)" zu schreiben! Dein Programm kann dorthin dann auch nichts schreiben, es sei denn, du führst es mit Administratorrechten aus oder gibst deinem eigenen Benutzerkonto NTFS-"Vollzugriff" auf das Verzeichnis, in dem die EXE liegt.
Ergänzend dazu: wenn ein Programm in diese Verzeichnisse ohne die nötigen Rechte versucht zu schreiben wird dies nicht fehlschlagen, da automatisch ein Kompatibilitätsmechanismus greift. Windows Vista/7 (keine Ahnung ob auch win8 ) virtualisiert die Dateizugriffe und leitet sie in den "VirtualStore" um (in den lokalen Anwendungsdaten). Bei einem neuen Programm sollte man jedoch selbstverständlich darauf achten - wie von Sebastian erklärt - nicht in diese Ordner zu schreiben.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
roteo



Anmeldungsdatum: 31.07.2014
Beiträge: 15

BeitragVerfasst am: 12.08.2014, 14:08    Titel: Antworten mit Zitat

Das alles ist logisch und sinnvoll. Jetzt muss ich nur herausfinden, wo die andere Datei sich befindet. Schließlich habe ich unterschiedliche Datensätze. Es muss also noch eine Datei vorhanden sein.

Gruß, Roteo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz