PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem in Delphi: Test ob Datei geöffnet ist


Manga
2003-06-10, 20:56:35
huhu alle zusammen;

ich wollt mal schauen ob ich wie folgt testen kann ob eine Datei bereits geöffnet ist oder net:


const fmClosed = $D7B0;

Function DateiGeoeffnet: Boolean;
// Ein Prädikat, das zurückliefert, ob die Datei offen ist.
Begin
If TFileRec(Datei).Mode = fmClosed Then DateiGeoeffnet := False
Else DateiGeoeffnet := True;
End;


so far so long

mfg manga

P.S: die variable "datei" ist eine globale var

x-dragon
2003-06-10, 21:35:55
Original geschrieben von Manga
huhu alle zusammen;

ich wollt mal schauen ob ich wie folgt testen kann ob eine Datei bereits geöffnet ist oder net:


const fmClosed = $D7B0;

Function DateiGeoeffnet: Boolean;
// Ein Prädikat, das zurückliefert, ob die Datei offen ist.
Begin
If TFileRec(Datei).Mode = fmClosed Then DateiGeoeffnet := False
Else DateiGeoeffnet := True;
End;


so far so long

mfg manga

P.S: die variable "datei" ist eine globale var
Ich hab mich selber bisher noch nicht so mit Dateioperationen beschäftigt, aber das Ergebnis der Funktion sollte man normal mir Result zurückgeben:
const fmClosed = $D7B0;

Function DateiGeoeffnet: Boolean;
Begin
If TFileRec(Datei).Mode = fmClosed Then Result := False
Else Result := True;
End; Was für eine Datei willst du denn überprüfen? Bzw. ob ein anderes Programm geöffnet ist?

Wenn es vielleicht mehrere unterschiedliche Dateien sind würde ich einfach Verzeichnis/Dateinamen gleich der Funktion mit übergeben, dann kann man sie vielseitiger anwenden (und globale Variablen sollte man ja so wenig wie möglich verwenden).

Manga
2003-06-10, 22:10:19
@X-Dragon

erstmal thx 4 answer

also zu dem punkt mit result ... sicher is des praktischer ... aber es handelt sich hierbei um ne übung und da ist keine erweiterte syntax btw. optimierung erlaubt .... und demzufolge hat sich das mit result erledigt

... desweiteren ist auch durch die übung vorgegeben, dass die variable "datei" (typisierte datei) .... global zu deklarieren ist (im implementation teil log. weise)

... und die krönung des ganzen ist, dass es ein prädikat sein soll, d.h. der function darf kein parameter übergebenen werden ...

so far so long

mfg manga

x-dragon
2003-06-10, 22:17:44
Achso eine Übungsaufgabe soll das werden, studierst du zufällig Informatik? In der Real- und Berufschule hatte ich wohl programmieren, aber solche Aufgabenstellungen sind mir dort nie untergekommen´:).

Manga
2003-06-10, 22:31:45
jep ich studiere techn. informatik ... was hastn du gelernt wenn ich ma fragen darf ?

und in der schule btw. berufsschule is mir sowas auch nie untergekommen ;)

x-dragon
2003-06-10, 23:12:41
Original geschrieben von Manga
jep ich studiere techn. informatik ... was hastn du gelernt wenn ich ma fragen darf ?

und in der schule btw. berufsschule is mir sowas auch nie untergekommen ;) Fachinformatiker Systemintegration, hat aber eigentlich nix mit programmieren zu tun. Naja dort haben wir ein wenig mit einfachen Schleifen und Verzweigungen gerabeitet in C, aber das wars im Endeffekt auch schon. In der Realschule haben wir zumindest mal ein primitives Pferderenn-Spiel geschrieben mit Pascal, das war schon lustiger :). Was Delphi angeht, meinte mein Chef mal zum Anfang meiner Ausbildung ich solle mir das doch mal anschauen, naja wie das so ist wenn die Firma kein Geld hat für einen vernünftigen Lehrgang hat ...

aths
2003-06-11, 00:27:17
Original geschrieben von X-Dragon
das Ergebnis der Funktion sollte man normal mir Result zurückgeben: Man kann in Delphi entweder "result" verwenden, oder den Namen der Funktion, soweit ich weiß sind vom Kompilat her beide Möglichkeiten identisch.

x-dragon
2003-06-11, 09:50:05
Original geschrieben von aths
Man kann in Delphi entweder "result" verwenden, oder den Namen der Funktion, soweit ich weiß sind vom Kompilat her beide Möglichkeiten identisch. Ach so ist das, naja aber zumindest sollte es mit Result übersichtlicher sein :).

Gast
2003-06-11, 15:30:27
ich habe immer den funktionsnamen zurückgegeben :) egal es geht wohl beides.

deine aufgabenstellung von dem prof wäre für eine c++ aufgabe weitaus geeigneter als für delphi. Denn ich denke die Funktion wird in der Realität doch so nie wirklich vorkommen... zumindest nicht in delphi...

Manga
2003-06-11, 17:39:09
@Gast die aufgabenstellung denk ich mir in der regel net selbst aus und rummosern und meckern bringt einen da auch net unbedingt weita ...

@aths & x-dragon ... prinzipiell kann man in delphi rückgabewerte über den funktionsnamen bzw. über "result" zurückgeben ... aber "result" kann man nur verwenden wenn die optimierung (btw. erweiterte syntax ... bin mir net ganz sicher aber ich glaub, dass es die optimierung is ... auch egal) aktiviert ist, und das ist uns halt untersagt ...

@x-dragon ... des nen fachinformatiker für systemintegration weniger mit progen zu tun hat als nen fachinformatiker für anwendungsentwicklung nuja ... liegt doch auf der hand oder ?!? ;) ... ich hoff ma, dass der fainfo für systintegr. bei dir keine fehlentscheidung war ...

im rahmen meiner ausbildung zum it-system-elektroniker hatten wir auch nen bissel "delphi" rumgespielt ... aber nuja ... das war eher son bissel oberflächegeplänkel ... ich würds net als progen, sondern eher als rumgeplansche in ner fütze bezeichnen ;) ...


so far so long

mfg manga

x-dragon
2003-06-11, 23:27:23
Naja rückblickend war es schon eine Fehlentscheindung (hab auch vorher schon versucht meinen Chef davon zu überzeugen), aber ich interessiere mich auch für PCs allgemein, von daher kann ich viel damit ausgleichen.

Mmm, also wenn ich die Optimierung ausschalte (fürs Debugging, da man auf manche Variablen, durch die Optmierung, ja nicht zugreifen kann) gibts dann eine Fehlermeldung beim Result, oder wie läuft das dann?

Manga
2003-06-12, 00:25:56
tjo er kennt result halt net ... undefinierter bezeichner bla bla bla ....

und ich hab mich geirrt; es hängt von der erweiterten syntax ab ...

so far so long

mfg manga

Haarmann
2003-06-12, 10:32:01
X-Dragon

Als Pascalianer sag ich nein, bleib mir mit Deinem "Result" vom Leibe Du C Syntaxer - weiche von mir Satan ;) !
Das man kein Result:= macht ist für viele ungewöhnlich, aber in Pascal is halt noch Vieles anders gelöst. Result ist eben eigentlich ein Zugeständnis an Umsteiger.

Gast

Wenn man Delphi ned mag, so sollte man doch neutral drüber urteilen. Ich z.B. sehe nichtmals ne Existenzberechtigung von C++ als Umgebung, weil sie aus meiner Sicht fast alle Nachteile vereint. Ganz alle Nachteile vereint dann Java ;).

Manga

Delphi "proggen" ist fast schon ein rumklicken, solange man nur Forms braucht und keine DM ;). Mag mich da noch an ne Zeiterfassung erinnern, die wer mal zusammengeklickt hat. Er schrieb keine Zeile Code selbst - nur paar SQL Strings ins Form.
Das ist allerdings auch der Sinn einer RAD Umgebung.

x-dragon
2003-06-12, 12:07:09
Original geschrieben von Haarmann
X-Dragon

Als Pascalianer sag ich nein, bleib mir mit Deinem "Result" vom Leibe Du C Syntaxer - weiche von mir Satan ;) !
Das man kein Result:= macht ist für viele ungewöhnlich, aber in Pascal is halt noch Vieles anders gelöst. Result ist eben eigentlich ein Zugeständnis an Umsteiger.
...
Delphi "proggen" ist fast schon ein rumklicken, solange man nur Forms braucht und keine DM . Mag mich da noch an ne Zeiterfassung erinnern, die wer mal zusammengeklickt hat. Er schrieb keine Zeile Code selbst - nur paar SQL Strings ins Form.
Das ist allerdings auch der Sinn einer RAD Umgebung. Nene so aber nicht ... Ich hab selbst zuerst mit Turbo Pascal angefangen, dann ein paar Jahre Pause gemacht und musste dann C in der Berufschule zwangsweise machen und Delphi hab ich mir dann selbst beigebracht.

Und ich hab mal kurz ein Blick in ein Buch geworfen namens "Delphi 5" von Addison-Wesly und dort wird ebenfalls wie auch in der Delphi-Hilfe Rückgabewerte per Result zurückgeliefert, also nix C sondern Delphi-Syntax :bäh:.

Das man Delphi-Programme zsammenklicken kann stimmt wohl, aber diese Assistenten sind fast nur für Billig-Progs geeignet da sie viel zu unflexibel sind, was zukünftige Programm-Änderungen/-Anpassungen sehr schwierig macht. Und zusätzlich bringen sie meistens viel zu viel Ballast mit ins Programm.

Delphi-Programme müssen normal auch geproggt werden, kannst ja z.B. mal Aths fragen ob er für den aTuner einen Assistenten verwendet hat :).

Haarmann
2003-06-12, 14:07:10
X-Dragon

Ich lernte Delphi mehr oder minder in Tagen soso lala, als ich damit paar CGIs hämmern musste. War nicht wirklich schwer, da man praktisch allen Code recyclen konnte. Besonders die DB Funktionen... Damals wars noch Delphi 2 und dort gings mitem Result wohl gar nicht ... Delphi passt sich schlich an die Proggergewohnheiten an - das soll ja nicht schlimm sein. Von Delphi 5 auf frühere Versionen schliessen würd eich übrigens vermeiden.

Da ich Delphi Code gut lesen kann, weil er im Gegensatz zu allem was C Syntax nutzt auch lesbar ist :bäh:, habe ich keine Probleme die richtigen Änderungen reinzukriegen. Den Source dazu hast ja. Ich ahne aber bereits, dass es andere Gründe hat, wieso Du das nicht tun würdest - kannst sein, dass Du eigene Objekte vererbst?
Ich persönlich halte nämlich von Objekten 0 nada und gar nichts - das Zeugs taugt einzig für RAD und sonst gehörts in de Gulli gekippt imho.

Ballast? Tja RAD heisst auch eintauschen von schnellstem Code gegen schnellste Entwicklungszeit - falls Du kein RAD willst, dann ist ne RAD Umgebung wohl auch nicht das ideale Werkzeug.

Wenn jemand fragt, ob ich was ändern kann und es ist technisch aufwendig, dann kostets halt dementsprechend viel ;). Ist nicht mein Problem...

Assistenten? Meinst ned eher Komponenten? Abgesehen davon sieht der Atuner nicht gerade nach nem kompakten Proggi aus für seine Funktionsarmut... Allerdings benutzte ich Atuner nur einmal kurz um ne GF zu foltern und es war ne alte Version.

Xmas
2003-06-12, 14:14:22
Original geschrieben von Haarmann
X-Dragon

Als Pascalianer sag ich nein, bleib mir mit Deinem "Result" vom Leibe Du C Syntaxer - weiche von mir Satan ;) !
Das man kein Result:= macht ist für viele ungewöhnlich, aber in Pascal is halt noch Vieles anders gelöst. Result ist eben eigentlich ein Zugeständnis an Umsteiger.

Gast

Wenn man Delphi ned mag, so sollte man doch neutral drüber urteilen. Ich z.B. sehe nichtmals ne Existenzberechtigung von C++ als Umgebung, weil sie aus meiner Sicht fast alle Nachteile vereint. Ganz alle Nachteile vereint dann Java ;).

Manga

Delphi "proggen" ist fast schon ein rumklicken, solange man nur Forms braucht und keine DM ;). Mag mich da noch an ne Zeiterfassung erinnern, die wer mal zusammengeklickt hat. Er schrieb keine Zeile Code selbst - nur paar SQL Strings ins Form.
Das ist allerdings auch der Sinn einer RAD Umgebung.
1. Result als Zugeständnis für Umsteiger? Mir ist ehrlich gesagt keine Sprache bekannt, in der es Result noch gibt. Ganz bestimmt nicht C und Derivate.

Result ist in einigen Fällen sogar ganz praktisch, weil man damit weiterrechnen kann, ohne eine zusätzliche Variable deklarieren zu müssen:
Result := Result + 3;
geht mit dem Funktionsnamen nicht, weil das dann ein rekursiver Funktionsaufruf wäre.

2. C++ ist eine Sprache, keine Umgebung. Der BCB kann praktisch das, was Delphi auch kann. Nur ist er unter der Oberfläche flexibler. Wenn das RAD-Zeug nicht ausreicht (und das sind die allermeisten Fälle) arbeite ich jedenfalls deutlich lieber mit C++ als mit Object Pascal.

x-dragon
2003-06-12, 15:15:35
Original geschrieben von Haarmann
...
Ich ahne aber bereits, dass es andere Gründe hat, wieso Du das nicht tun würdest - kannst sein, dass Du eigene Objekte vererbst?
Ich persönlich halte nämlich von Objekten 0 nada und gar nichts - das Zeugs taugt einzig für RAD und sonst gehörts in de Gulli gekippt imho.

Ballast? Tja RAD heisst auch eintauschen von schnellstem Code gegen schnellste Entwicklungszeit - falls Du kein RAD willst, dann ist ne RAD Umgebung wohl auch nicht das ideale Werkzeug.

Wenn jemand fragt, ob ich was ändern kann und es ist technisch aufwendig, dann kostets halt dementsprechend viel ;). Ist nicht mein Problem...

Assistenten? Meinst ned eher Komponenten? Abgesehen davon sieht der Atuner nicht gerade nach nem kompakten Proggi aus für seine Funktionsarmut... Allerdings benutzte ich Atuner nur einmal kurz um ne GF zu foltern und es war ne alte Version. Klar mit eigenen Objekten arbeiten ich natürlich auch, allerdings hauptsächlich um Daten aus DBs auszulesen und weiterzuverabeiten

Ich finde, das gute an Delphi ist gerade, das man sehr flexibel ist, wie man ein Programm erstellen kann. Man kann mit Assistenten und Komponenten sich die Arbeit teilweise sehr erleichtern, aber man kann andererseits auch ohne zusätzlich Hilfsmittel und auch ohne VCL ein Programm schreiben. Je nach dem wieviel Entwicklungszeit man hat und wie wichtig die Programmgröße und -geschwindigkeit ist.

Assistenten, hat Delphi ja auch ein paar z.B. um einfache DB-Anwendungen zusammenzuklicken, und noch für ein paar andere Sachen. Komponenten erleichtern teilweise natürlich auch sehr die Programmierarbeit, mit der letzten die verwendet habe, konnte man z.B. relativ einfach die Kommuniaktion über die serielle Schnittstelle steuern (sowas will ich auch nicht unbedingt manuell machen :) ).

Ich vermute mal das der aTuner wahrscheinlich mit VCL geschrieben ist (was es auch etwas erleichtert dürfte die ganzen Systeminformationen abzufragen), da kommen schon ein paar 100 kb zusammen und die grafischen Spielereien kommen natürlich auch noch hinzu. Also da läßt sich mit Sicherheit noch einiges einsparen wenn man es darauf anlegt und die Zeit dafür investieren will.

Ansonsten geb ich dir aber völlig recht, das man Object Pascal bzw Delphi-Programme sehr viel leichter verstehen und nachvollziehen kann als C, und wenn man eine gewisse Grundlage hat ist der Einstieg in die Delphi-Programmierung natürlich auch einiges leichter.

aths
2003-06-12, 17:53:19
Original geschrieben von X-Dragon
Ich vermute mal das der aTuner wahrscheinlich mit VCL geschrieben ist (was es auch etwas erleichtert dürfte die ganzen Systeminformationen abzufragen), da kommen schon ein paar 100 kb zusammen und die grafischen Spielereien kommen natürlich auch noch hinzu. Also da läßt sich mit Sicherheit noch einiges einsparen wenn man es darauf anlegt und die Zeit dafür investieren will.Japp, aTuner nutzt exzessiv VCL. Das Tool wird dadurch größer, aber dafür ist die Benutzung der Dialog-Elemente eben sehr bequem.

[EF]peppa
2003-06-12, 21:44:52
Original geschrieben von Xmas
Result ist in einigen Fällen sogar ganz praktisch, weil man damit weiterrechnen kann, ohne eine zusätzliche Variable deklarieren zu müssen:
Result := Result + 3;
geht mit dem Funktionsnamen nicht, weil das dann ein rekursiver Funktionsaufruf wäre.

Geht, aber nur dann wenn die erweiterte Syntax (oder wie die jetzt heist) deaktiviert ist. Dann kennt der compiler die Variable result garnicht und man ist gezwungen den Funktionsnamen zu verwenden. Zummindest bei FreePascal erkennt der compiler ob du einen Funktionsaufruf oder ob du, wie in deinem Beispiel, addieren moechtest. Ob er dass auch erkennt wenn die Funktion keine Parameteruebergabe hat glaube ich nicht.

Ich hoffe ich irre mich da jetzt nicht, bei FreePascal ist dass auf jeden Fall so. Da kann mann auch mit dem Parameter -Sd Delphi-Code einsetzten. Sprich result.

mfg peppa

Manga
2003-06-12, 22:12:19
@[EF]peppa ich denke du irrst da afaik gewaltig, was delphi betrifft ... er würde es als rekursiven funktionsaufruf interpretieren ...

und wenn man die übergabeparameter weglässt, vorausgesetzt die funktion hat welche, dann meckert er dies gleich an ...

so far so long

mfg manga

Haarmann
2003-06-12, 22:21:28
aths

Hätte mich auch erstaunt, wenn jemand das "Grundgerüst" von Hand macht... Das geht bequemer und man hat mehr Zeit für die wichtigeren Teile - den Inhalt.

X-Dragon

Wenn ich schon mal was progge (und das tue ich weder gerne, noch machts mir Spass), dann muss es schnell entwickelt sein... verglichen mit Java rennt das Teil wohl eh und falls ich wirklich mal Speed brauchte, werd ich wohl mal kurz nen asm Teil reinhauen müssen.

[EF]peppa
2003-06-12, 22:25:38
Original geschrieben von Manga
@[EF]peppa ich denke du irrst da afaik gewaltig, was delphi betrifft ... er würde es als rekursiven funktionsaufruf interpretieren ...

und wenn man die übergabeparameter weglässt, vorausgesetzt die funktion hat welche, dann meckert er dies gleich an ...

so far so long

mfg manga

Thx, somit hat sich das auch wieder erlaedigt. :)

x-dragon
2003-06-12, 23:07:12
Original geschrieben von Haarmann
...
X-Dragon

Wenn ich schon mal was progge (und das tue ich weder gerne, noch machts mir Spass), dann muss es schnell entwickelt sein... verglichen mit Java rennt das Teil wohl eh und falls ich wirklich mal Speed brauchte, werd ich wohl mal kurz nen asm Teil reinhauen müssen. Ok, so gehts natürlich auch, wenn man so vielseitig ist :).

Haarmann
2003-06-13, 09:09:45
X-Dragon

Ist so ne Borland "Seuche", dass man das inlinen kann unds recht einfach ist. Du musst Dich um wenig kümmern, da Du die Variablen von Delphi noch brauchen kannst. Damit fällt eine Schwierigkeit flach. Assembler ist ohne die komplexen i386 Addy Murkse eigentlich noch ganz einfach.

Xmas
2003-06-13, 14:59:53
Original geschrieben von Haarmann
X-Dragon

Ist so ne Borland "Seuche", dass man das inlinen kann unds recht einfach ist. Du musst Dich um wenig kümmern, da Du die Variablen von Delphi noch brauchen kannst. Damit fällt eine Schwierigkeit flach. Assembler ist ohne die komplexen i386 Addy Murkse eigentlich noch ganz einfach.
Sag mir einen Compiler mit Inline-Assembly, bei dem du die Variablennamen nicht verwenden kannst...

Haarmann
2003-06-13, 16:28:00
Xmas

Die Seuche bezog sichs aufs Vorhandensein des Inlines... und damit hat soweit ich mich noch entsinne eben Borland angefangen. War wohl ned ganz verständlich formuliert...
Dass es einfach ist mit all den netten Namen Assembler Teile zu tippsen nahm ich als Gegeben an.