Hallo Ich habe ein Problem mit dem Open Befehl aus Gambas. Es handelt sich um Gambas 2.7 unter Debian "Lenny" Folgender Gambas-Code, der irgendeinmal nach weiterem Ausbau zeilenweise etwas aus einem Textfile einlesen soll, liefert mir als Fehlermeldung beim Ausführungsversuch, das in der Zeile "OPEN = stFileNameOpen FOR READ AS hFileIn" hFileIn nicht definiert ist (unknown identifier hFileIn): PUBLIC SUB ChooseFile_Click() DIM hFileIn AS File DIM stFileNameOpen AS String Dialog.Title = "Open File" Dialog.OpenFile stFileNameOpen = Dialog.Path Label1.Text = "Path: " & stFileNameOpen OPEN stFileNameOpen FOR READ AS hFileIn END Dieser Code Schnipsel ist nach dem Vorbild in "Beginners Guide to Gambas" erstellt. Ich habe auch versuchsweise andere Namen für hFileIN gewaehlt, um nicht mit irgendwelchen reservierten Worten zusammenzustossen. Ausserdem habe ich hFileIn versuchsweise auch mal als PUBLIC definiert, aber der Fehler blieb gleich. An einer Stelle im Netz habe ich als Beispiel für "OPEN stFileNameOpen FOR READ AS hFileIn" gefunden, "#hFileIN" zu schreiben. Abgesehen davon, das ich dann nicht mehr genau weiss, was ich mache (Ich bin Anfaenger), bekomme ich dann die Fehlermeldung: "No startup method". Auf gambas.org habe ich folgendes Beispiel gefunden: " hFileIn = OPEN stFileNameOpen FOR READ". Ich erhalte aber ebenfals als Fehlermeldung: "No startup method". Ansonsten scheint dieser Abschnitt einigermassen zu funktionieren, wenn ich die betreffende Zeile entferne. Ich erhalte eine Dialogbox zur Auswahl von Pfad und File, und das wird auch anschliessend im Label angezeigt. Und jetzt weiss ich erstmal nicht mehr weiter. Kennt sich einer mit dem Open Befehl in Gambas aus? Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Bernd Wiebus schrieb: > AS hFileIn Das bedeutet das ein Typ hFileIn existieren muss. hFileIn ist aber eine Variable vom Typ File (FileHandler). http://www.gambasdoc.org/help/lang/open gibt eine gute Übersicht mit passendem Beispiel...
Hallo hp-freund. >> AS hFileIn > Das bedeutet das ein Typ hFileIn existieren muss. > hFileIn ist aber eine Variable vom Typ File (FileHandler). Die Variable ist aber 7 Zeilen weiter oben als File definiert worden: "DIM hFileIn AS File". Eine Zeile darunter "DIM stFileNameOpen AS String" und das hat ja funktioniert. Ich sollte den Gültigkeitsbereich also noch nicht verlassen haben. > http://www.gambasdoc.org/help/lang/open > gibt eine gute Übersicht mit passendem Beispiel... Mmmmmh..... Von der Seite hatte ich das im Vorposting angegebene Beispiel mit: " hFileIn = OPEN stFileNameOpen FOR READ". Ich erhalte aber ebenfals als Fehlermeldung: "No startup method". Meinst Du, es ist keine gute Idee, da einen Pfad über eine String Variable hineinzuschreiben??? Vermutlich übersehe ich irgendwas mit dem file-handler. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Bernd Wiebus schrieb: > Die Variable ist aber 7 Zeilen weiter oben als File definiert worden: > "DIM hFileIn AS File". Genau. Aber: Dim Variable AS Typ Hinter AS muss der Typ der Variable und nicht eine Variable stehen. Existiert die zu öffnende Datei auch? Leserechte sind auch vorhanden?
Hallo hp-freund. >> Die Variable ist aber 7 Zeilen weiter oben als File definiert worden: >> "DIM hFileIn AS File". > Genau. Aber: > Dim Variable AS Typ > Hinter AS muss der Typ der Variable und nicht eine Variable stehen. Umpf.....eventuell das #? Ich habe das jetzt so hingekriegt: PUBLIC hFileIn AS File PUBLIC stFileNameOpen AS String PUBLIC SUB _new() END PUBLIC SUB Form_Open() END PUBLIC SUB ChooseFile_Click() DIM sLine AS String Dialog.Title = "Open File" Dialog.OpenFile stFileNameOpen = Dialog.Path Label1.Text = "Path: " & stFileNameOpen OPEN stFileNameOpen FOR READ AS #hFileIn LINE INPUT #hFileIn, sLine Label2.Text = sLine LINE INPUT #hFileIn, sLine Label3.Text = sLine LINE INPUT #hFileIn, sLine Label4.Text = sLine LINE INPUT #hFileIn, sLine Label5.Text = sLine END Wirf mir jetzt nicht das fehlende CLOSE vor, das kommt noch. Irgendwann :-) Weil das # habe ich in einem Beispiel gefunden, und so gehts. Heist das jetzt, daß das # aus der Variablen einen "Typ der Variablen" macht? Ich müsste das mal mit "PUBLIC hFileIn AS #File" testen..... dann waere ja hFileIn als Typ definiert. Oder sehe ich das zu naiv? Das mit der "Hungarian notation" und h als Kennzeichnung für einen Filehandler war mir vollständig neu. :-( > Existiert die zu öffnende Datei auch? Leserechte sind auch vorhanden? Ja. Hab ich extra streng Zeilenorientiert für den Zweck gut erreichbar deponiert. Aber zum Auswerten der Zeilen muss ich die erst einlesen..... Das in Label zu schreiben ist auch nur um zu prüfen, ob es grundsätzlich funktioniert wie angedacht. > Funktioniert es jetzt? > Anbei ein kleines Beispiel für gambas 2.21 Vielen Dank. Ich werde mir das Programm gleich mal ansehen. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Hallo Bernd, das # gibt den numerischen Wert des handles an der für die Ein- u. Ausgabe benötigt wird... ... hp-freund
Hallo hp-freund. > das # gibt den numerischen Wert des handles an der für die Ein- u. > Ausgabe benötigt wird... Ah. Ok. Danke! Analog zur haeufigen Verwendung von "#" als Kennzeichnung eines nummerischen Wertes. Ich müsste mal tiefer im "Beginners Guide to Gambas" graben, um explizit darüber was zu finden. Mein letzter Haenger war, daß ein Modul mehrere Funktionen enthalten könnte, und darum auf eine Funktion im Modul weder mit Modulname noch Funktionsname sondern mit Modulname.Funktionsname zugegriffen werden muss. Heisst das jetzt im Umkehrschluss, ich koennte in einem anderen Modul eine andere Funktion mit gleichem Funktionsnamen erstellen, und beim Aufrufen dann ueber den Modulnamen die beiden Funktionen auseinanderhalten? Die Notation hat was, ist aber seeeehr ungewohnt. Vor allem, wenn das letzte Programmieren 15 Jahre zurueck liegt..... Ist es sinnvoll, paralell in VisualBasic (oder irgendeine andere moderne Programmiersprache) Unterlagen zu schielen, um Ideen zu finden? Letztlich handelt es sich auch darum, sich an die grammatikalischen/linguistischen Konstrukte moderner Programmiersprachen zu gewoehnen. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Hallo Bernd, ich glaube das es genug Beispiele für gambas gibt. Ich persönlich würde nicht zu VB gucken. Kleine Unterschiede gibt es schon. Laufen eigentlich meine Quelltexte Version 2.21 in deinem gambas? Wenn ja, hier noch was. Es ist möglich in jedem Modul eine Funktion mit gleichem Namen zu definieren.
Hallo hp-freund. > ich glaube das es genug Beispiele für gambas gibt. Ich persönlich würde > nicht zu VB gucken. Kleine Unterschiede gibt es schon. Danke! Gut zu wissen. > Laufen eigentlich meine Quelltexte Version 2.21 in deinem gambas? Problemlos. Allerdings habe ich das selber nicht in eine Textbox eingelesen, weil ich vorhabe, das File zeilenmaeßig zu analysieren...... Auf lange Sicht gesehen müsste ich das File für die Laufzeit des Programmes irgendwie zergliedert oder sonstwie geordnet ablegen. Ich dachte dabei aus alter Tradition an ein Array. Allerdings ist die Fillänge (Zeilenzahl) selber vorher unbekannt. D.h. ich muesste Speicherplatz für ein Array variabel reservieren können, oder noch besser, zur Laufzeit umaendern können. Das war frueher immer eine kitzelige Sache und viele Programmiersprachen liessen das auch gar nicht erst zu. Ob und im welchem Umfange das Gambas zulaesst, werde ich mir heute abend noch durchlesen. Vieleicht ist ja eine verkettete Liste doch besser. > Wenn ja, hier noch was. Danke. Ich sehe es mir gleich mal an. > Es ist möglich in jedem Modul eine Funktion mit > gleichem Namen zu definieren. Ich habe damit schon rumgespielt....und ich habe das auch festgestellt und auch weiter festgestellt, das ich auf die Tour eine Moeglichkeit habe, komplette Module per Namensaenderung auszutauschen. Die Art der Notation faengt an, mir zu gefallen. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Bernd Wiebus schrieb: > Allerdings habe ich das selber nicht in eine Textbox > eingelesen, weil ich vorhabe, das File zeilenmaeßig zu analysieren...... Das in meinem Beispiel ist keine Textbox sondern eine Listbox. Somit stehen schon Listenfunktionen wie hinzufügen, entfernen, Index u.a. zur Verfügung. Hab mal testweise 1000000 Strings der Länge 50 + Zeilennummern in die Liste geschrieben - ohne Probleme. Schnelle Rechner mit viel Speicher sind doch was Schönes :)
Hallo hp-freund. > Wenn ja, hier noch was. Es ist möglich in jedem Modul eine Funktion mit > gleichem Namen zu definieren. Ich habe es mir angesehen. Nette Demonstration dieses Prinzieps. >> Allerdings habe ich das selber nicht in eine Textbox >> eingelesen, weil ich vorhabe, das File zeilenmaeßig zu analysieren...... > Das in meinem Beispiel ist keine Textbox sondern eine Listbox. > Somit stehen schon Listenfunktionen wie hinzufügen, entfernen, Index > u.a. zur Verfügung. Habe ich mir mal angesehen, aber vorlaeufig noch nichts mit gemacht. Ich habe erst mal mit ein paar anderen Sachen rumgespielt, z.B. den ersten Ansaetzen eines Gerberviewers. Joerg Wunsch duerfte sich darueber allerdings kringelig lachen. Siehe die beigelegte Datei Test.tar Im Ordner Testfiles sind drei Files, mit denen Du das Teil testen kannst. Draw klappt aber nur für das ~~247D.gbr File, weil ich mir noch was einfallen lassen muss, um die Formatierung sicher zu erkennen. Genauso die Skalierung. Desweiteren habe ich alles nur mit LineWith 2 gezeichnet. Auch die Fileerkennung muss noch gehoerig verbessert werden, damit sie nicht mehr so leicht zu veraeppeln ist. :-) Grundsaetzlich sollte ich mich nach diesen Vorstudien mal auf den Hintern setzten und sehen, wie ich das ganze struckturiere. Dazu muesste ich mir jetzt z.B. mal Ansehen, wie ich Daten von einer Klasse in eine andere schaufel. Einfach per public Namen geht ja nicht, dazu ist zu gut gekapselt. Der Code ist mittlerweile auch schon etwas verworren, und vermutlich existieren von meinen Versuchen Unmengen von deklarierten aber nirgendwo verwendeten Variablen, die ich vergessen habe, zu loeschen. Ich hatte ein paar Probleme mit der Drawing Area. Urspruenglich war sie mit Bestandteil von SUB ChooseFile. Abgesehen, das sie auch bei ungeigneten Files loslief, zeichnete sie nur im linken oberen Quadranten und schnitt alles ab, was darueber hinaus ragte. Es war keine "Skalierungsangelegenheit". Ich habe sie aus anderen Gruenden ausgelagert, und ploetztlich funktioniert sie.....? Ich werde jetzt erstmal Doku und Brainstorming machen, waerend ich mich wieder etwas mehr der Hardware zuneige. > Hab mal testweise 1000000 Strings der Länge 50 + Zeilennummern in die > Liste geschrieben - ohne Probleme. Duerfte fuer die meisten Faelle langen....:-) > Schnelle Rechner mit viel Speicher sind doch was Schönes :) Ja. Aber bei mir laeuft das auf einem Sony Vaio Schleppi von 2002 oder so. :-) Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Hallo Bernd, ich habe dein Prog mal getestet. Es wird schon mal was gezeichnet :) Zu mindest bei 247d das andere gibt einen string/integer Fehler. Eigentlich ist ein CAD Programm im weitesten Sinne ein klarer Fall für OOP. Hab mal einige Versuche dies bezüglich angestellt, aber in der gambas 2 Version fehlen noch einige wichtige Sachen wie typedef, struct und objektlisten. Lediglich Textlisten existieren, so wie ich das sehe. collection listbox usw. Ich lasse mich aber gern korrigieren. Meine Vorstellung war ein Grafikobjekt (Grafik) und davon abgeleitet ein GrafikLinie ein GrafikPunkt, GrafikBogen usw. Das scheint auch alles so weit in Ordnung, nur leider fehlt mir eben die Object-Liste um diese Objekte abzuspeichern. So müsste man also alle Objekte in TextZeilen wandeln und diese in der List speichern. z.B.: Objekttyp,Farbe,Ebene,Linienart,Linienbreite,Radius,x1,y1,x2,y2,x3,y3... .. "Punkt",1,0,1,0.25,0,100,100 //Farbe 1,Ebene 0,LinArt,Breite 0.25,Position "Bogen",1,0,1,0.5,20,10,10,100,100 //Radius 20 Start 10,10 Ende 100,100 "Linie",1,0,2,0.2,0,50,50,80,90 //Linie von 50,50 nach 80,90 usw. Diese Textzeilen werden dann mit FOR EACH ausgewertet und entsprechend des Objekttypes behandelt. Durch die Kommatrennung ist ein zerlegen der Textzeile auch recht einfach. ... hp-freund
Hallo hp-freund. > Hallo Bernd, > ich habe dein Prog mal getestet. Es wird schon mal was gezeichnet :) > Zu mindest bei 247d das andere gibt einen string/integer Fehler. Richtig. Weil das Format, in dem die Daten abgelegt wurden, leicht anders ist, und dann klappt diese primitievst Stringverwurstung nicht mehr. Nach der Stringzerlegung bleiben Buchstaben zurück, und bei der Integerumwandlung weiss er nicht mehr, was er tun soll...... So ein Strichmuster würde in vielen Fällen langen, wenn man ein kleiberes File manipulieren möchte. Es würde zur Orientierung langen, und man koennte in einem passend aufgebauten Programm die Draws erkennen, von denen man einen Endpunkt leicht verrücken möchte, oder die Blinks, für die man gerne eine andere Blende haette. > Eigentlich ist ein CAD Programm im weitesten Sinne ein klarer Fall für > OOP. Richtig. Aber Gerberfiles sind schon etwas eigen. Ich habe das zuerst auch unterschätzt, nach dem Motto, so ein altes Lochstreifenformat dürfte sich schnell erschlagen lassen. Dummerweise ist aber vieles nicht fix definiert bzw. Kontextabhängig von einem Kontext, den man im Zweifel nicht immer kennt. Einfaches Beispiel der Maschinen-Stopp Befehl (M02*) der "normalerweise" immer am Ende steht, quasi als EOF für die Maschine zum Anhalten, mußte bei einigen Maschinen aber am Anfang stehen......damit noch etwaige laufende Programme sicher beendet werden. Auf einer normalen Maschine eingesetzt, fuehrt das dazu, das die Maschine direkt nach Programmstart wieder gestoppt wird. Die Informationen dazu sind aber nicht im File selber....... Das heisst, der Benutzer MUSS eine Möglichkeit haben, korriegierend einzugreifen.....will ich jetzt das "M02*" am Ende oder am Anfang haben. Ganz sicher falsch sind am Anfang und am Ende oder ganz weglassen. Letztlich sind sie wichtig als Trenner, wenn das gleiche Programm zigmal hintereinander abläuft. Für eine Übertragung nach extendet Gerber wäre es aber egal. Das EOF langt mir persönlich, Am Anfang brauch ich nicht und bei extendet Gerber ist es definiert am Ende. Das heißt, zum Aslesen könnte ich es einfach ignorieren und bei extendet einfach auf jeden Fall am Ende hinschreiben. Die unterschiedlichen vorkommenden Zahlenformate und die Modalität sind da schon problematischer..... > Lediglich Textlisten existieren, so wie ich das sehe. collection listbox > usw. > Ich lasse mich aber gern korrigieren. Textlisten würden für Gerber dicke langen. :-) > > Meine Vorstellung war ein Grafikobjekt (Grafik) und davon abgeleitet ein > GrafikLinie ein GrafikPunkt, GrafikBogen usw. Hört sich irgendwie SVG-mäßig an....:-) > Diese Textzeilen werden dann mit FOR EACH ausgewertet und entsprechend > des Objekttypes behandelt. Durch die Kommatrennung ist ein zerlegen der > Textzeile auch recht einfach. Momentan bin ich an einem Punkt, wo ich nachdenke, wie ich die Kommunikation zwischen Unterschiedlichen Programmteilen machen will. Z.B. den Pfad in einem Form einlesen, aber in mehreren anderen verwenden....dazu muss er aber an die anderen übergeben werden. Das klappt nicht einfach, weil Gambas in der Art keine globalen Variablen kennt. Es bestände wohl die Möglichkeit, eine globale Klasse einzuführen, und es so über einen Umweg zu erreichen.....aber ich denke mir, das muss auch anders gehen. Nur wie..... Das was ich an Unterlagen habe, schweigt sich dazu aus, oder ich Übersehe es. Vermutlich bietet die Objektorientierung dazu irgendeinen Weg.....die Variablen Public in einer Klasse, und die Klasee reicht die an die Form weiter....irgendwie so.....du merkst, OO ist für mich eine seehr fremde Welt. Möglicherweise habe ich das Pferd von hinten aufgezäumt. Der Button im Form ruft direkt im Form die Dialogbox auf.....Was wäre, wenn eine Klasse eine Information vom Form erhaelt, das ein Button gedrückt wurde. Dann ruft die Klasse den Dialog auf, und verteilt anschliessend den Pfad dahin, wo er gebraucht wird? Als ich vor 20Jahren mal von OO gehört habe, hat mich das begeistert. Aber seitdem hatte ich nichts mehr damit zu tun, und mir ist der Draht dazu irgendwie abhanden gekommen. Mit freundlichem Gruß: Bernd wiebus alias dl1eic http://www.dl0dg.de
Kennst Du diese Seiten schon? http://de.wikibooks.org/wiki/Gambas:_Variablen#Globale_Variablen_in_Gambas http://de.wikibooks.org/wiki/Gambas
Hallo hp-freund. > Kennst Du diese Seiten schon? Gut das Du mich an das Gambas Wikibook erinnert hast. Ich hatte mir davon zwar schon eine Kopie auf den Rechner gezogen, aber die war jetzt gut 1 Jahr oder so alt, und seit dem hat sich doch etwas getan. :-) Die englische Version ist gaaaanz anders, und deckt oft die Luecken der deutschen Version ab und vice versa. Desweiteren kreist ja noch eine Beginners Guide to Gambas als PDF Version. Der ist recht umfassend, aber auch etwas alt. Die eigene HTML-Hilfe von Gambas ist auch gut. Wenn ich wechselseitig in allen dreien lese, hilft mir das oft weiter. ;-) Wie weit ich bin, siehst Du in obigem Screenshot. Die Sourcen sind in der angehaengten Zip-Datei. Mit freundlichem Gruß: Bernd Wiebus alias dl1eic http://www.dl0dg.de
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.