Hallo Hans-Werner,
Am 22.08.2020 um 18:36 schrieb OoOHWHOoO:
Hallo Gerhard,
"[...] dass wohl alles ohne das Zeichen funktioniert. [...]" stimmt
mittlerweile (nach weiteren Test meinerseits) nicht mehr.
Dein jetziger Test beweist das aber nicht! Denn hier liegt ein Problem
des Print-Befehls mit dem # allgemein vor (weil das # dem Datenkanal
vorangestellt werden muss?), das hat also nichts speziell mit dem
Typ-Deklarationszeichen zu tun. Das ist also kein Gegenbeispiel für
meine Aussage, die ich im Übrigen nicht beschwören kann, es sieht halt
bloß bisher so aus.
Um das angehängte "#" als Typ-Deklarationszeichen geht es gar nicht
mehr, sondern:
Wenn im "Ausdruck" für "Print" ein "#" vorkommt, dann MUSS im
"Ausdruck" für "Print " irgendwo vor dem "#" ein " " sein, ansonsten
gibt's eine Syntaxfehler-Fehlermeldung:
Sub Print_To_Output
Dim VarDouble#
Dim Pfad_Datei As String
Dim Datenkanal As Integer
VarDouble# = 0.123123
Pfad_Datei = "E:\TMP\Output.txt"
Datenkanal = Freefile
Open Pfad_Datei For Output As #Datenkanal
Print #Datenkanal," VarDouble# = ",VarDouble# ' O.K.
'Print #Datenkanal,"VarDouble# = ",VarDouble# ' ERROR
Print #Datenkanal," ABC#DEF" ' O.K.
Print #Datenkanal,"AB C#D EF" ' O.K.
Print #Datenkanal," ","ABC#DEF" ' O.K.
'Print #Datenkanal,"ABC#DEF" ' ERROR
'Print #Datenkanal,"ABC#D EF" ' ERROR
Close #Datenkanal
End Sub
Wenn das kein BasicCompiler-Fehler ist ...
Das würde ich auch so sehen, aber eben für den Print-Befehl, der das
problem mit # hat, egal, ob es hinter der Variablen hängt oder in einem
String steckt.
Mit dem Typ-Deklarationszeichen selbst hat es nicht zu tun, wie der
abgewandelte Befehl aus deinem Test zeigt:
Print #Datenkanal,"VarDouble# = ",VarDouble# ' ERROR
Print #Datenkanal,"VarDouble = ",VarDouble# ' kein ERROR
Das Problem ist offenbar, wie du schon erkannt hast, dass ein
Leerzeichen benötigt wird. Vielleicht wird sonst # noch zu dem
Datenkanal gezählt, aber das Komma sollte als Trennzeichen ausreichen.
Falls du einen Bug-Report schreibst, würde ich als Hauptargument den
String nehmen.
Viele Grüße
Gerhard
Viele Grüße
Hans-Werner :-))
------ Originalnachricht ------
Von: "Gerhard Weydt" <gerhard.weydt@t-online.de>
An: users@de.libreoffice.org
Gesendet: 22.08.2020 15:51:04
Betreff: Re: [de-users] Makro Basic - Ausgabe in Datei -
DoubleVariable via Typ-Deklarationszeichen # - Makro-Fehler-Abbruch
Hallo Hans-Werner,
wenn etwas bei Pitonyak steht, ist es deshalb auch nicht besser
begründet als bei den anderen Quellen, die du genannt hast, auch
beschreibt das, was er feststellen konnte und nicht, was er selbst
aus dem Compiler-Code ermittelt hätte; ich bin mir ziemlich sicher,
dass ich eine entsprechende Aussage von ihm selbst einmal gelesen
habe. Ob die ursprüngliche Idee war, dass das ürzel nach dem
eigentlichen Namen dazugehört oder nur für die Deklaration gebraucht
wird, können wir kaum entscheiden, für letzteres spricht aber die
Tasache, dass wohl alles ohne das Zeichen funktioniert.
Und auch der folgende Text zu Microsofts Visual Basic geht in die
gleiche Richtung:
In addition to specifying a data type in a declaration statement, you
can force the data type of some programming elements with a /type
character/. The type character must immediately follow the element,
with no intervening characters of any kind.
The type character is not part of the name of the element. An element
defined with a type character can be referenced without the type
character.
Wenn man das Ende wörtlich nehmen darf, dann ist die Hinzufügung des
Kürzels erlaubt, aber nicht nötig. In diesem Sinn wäre natürlich die
Fehlermeldung bei der Double-Variable ein Fehler, aber mir geht es
wie dir, ich mag diese Kürzel nicht und verwende sie nicht, ich weiß
auch nicht recht, warum sie eingeführt wurden, vielleicht noch zu
Lochkartenzeiten, wo man dann weniger Karten brauchte, so wie das
Unterbringen mehrerer Befehle in einer Zeile durch die Trennung mit
dem Doppelpunkt?
Was mich betrifft, würde ich es nicht für nötig halten, das als
Fehler zu melden.
Viele Grüße
Gerhard
Am 22.08.2020 um 15:23 schrieb OoOHWHOoO:
Hallo Gerhard,
so wie's ausschaut, hat das "Print" (und auch das "Write") -
beziehungsweise der Compiler - beim "Print"/"Write" in eine Datei
"sein Kreuz mit dem Doppelkreuz" ;-)) ...
Völlig unabhängig von einer Double-Variablen der Art "VarDouble#":
Im Zusammenhang mit "#" muss das erste Zeichen in der auszugebenden
Zeichenkette ein " " (Leerzeichen) sein.
Fehlt dieses Leerzeichen, meldet der Compiler den Syntax-Fehler
"Unzulässiger Wert oder Datentyp.Datentypen unverträglich." !
Sub Print_To_Output
Dim Pfad_Datei As String
Dim Datenkanal As Integer
Pfad_Datei = "E:\TMP\Output.txt"
Datenkanal = Freefile
Open Pfad_Datei For Output As #Datenkanal
Print #Datenkanal," #"
Close #Datenkanal
End Sub
Einen kleinen Hinweis, dass das "#" bei Print/Write in eine Datei
"eine besondere Rolle spielt" könnte eine Textpassage bei Pitonyak
liefern, wobei die internen Zusammenhänge völlig im Dunkeln liegen,
da muss man schon den Compiler-SourceCode kennen:
8.8. Daten aus einer Datei lesen und in eine Datei schreiben
Um Daten in Dateien zu schreiben oder aus Dateien zu lesen, die im
Modus Random oder Binary geöffnet wurden, verwenden Sie die
Anweisungen Put und Get. Für jeden anderen Modus verwenden Sie die
Anweisungen Line Input, Print und Write. Wenn keine Eingabedaten
angegeben sind, wird eine Leerzeile in die Datei geschrieben. Die
Anweisung Write akzeptiert mehrere Argumente zur Eingabe und fügt
beim Schreiben automatisch Trennzeichen ein. In der Datei werden die
Eingabeausdrücke voneinander durch Kommas getrennt, Zeichenketten
werden in doppelte Anführungszeichen gesetzt, Zahlen werden nicht
gekennzeichnet, und Datums- sowie boolesche Werte werden zwischen
Doppelkreuze (#) gesetzt. Zahlen mit Dezimaltrennzeichen werden
gemäß dem eingestellten Gebietsschema konvertiert.
https://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.pdf
Warum bei dem "Print", wenn nicht in eine Datei, das
"Warnung"-Symbol verbunden mit dem Text "Warnung" ausgegeben wird,
ist nicht nach vollziehbar, denn es passiert auch bei dem sehr
einfachen Beispiel in der "LibreOffice Hilfe":
Sub ExamplePrint
Print "ABC"
Print "ABC","123"
i = FreeFile()
Open "C:\Temp.txt" For Output As i
Print #i, "ABC"
Close #i
End Sub
Grüße
Hans-Werner :-))
-- Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.