Seite 1 von 1
Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 10:51
von MacX182
Tag alle zusammen,
Ich hab folgendes Problem:
Ich will folgende Schreibweise FFh (h Tiefgestellt) in 0xFF umwandeln. Dabei markiere Ich nur das FF. Das funktioniert soweit auch ganz gut, wenn da nicht das tiefgestellte h wäre. Denn wenn ich das Makro ausführe, wird die ganze umgewandelte Zahl Tiegfestellt. Also, gibt es irgendeine möglichkeit die Formatierung der Zahl beizubehalten. Danke schon mal im Voraus.
Hier noch der bisherige Code:
Code: Alles auswählen
Sub ChangeHex
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Text"
args3(0).Value = "0x"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
End Sub
Mfg MacX182
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 11:14
von turtle47
Hallo MacX182,
versuche es mal damit:
Code: Alles auswählen
Sub ChangeHex
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Text"
args3(0).Value = "0x"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Escapement.Escapement"
args1(0).Value = 0
args1(1).Name = "Escapement.Height"
args1(1).Value = 100
args1(2).Name = "Escapement.Auto"
args1(2).Value = false
dispatcher.executeDispatch(document, ".uno:Escapement", "", 0, args1())
End Sub
Hilft das weiter?
Jürgen
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 11:36
von MacX182
Erstmal danke für deine Bemühungen,
Bei mir verhält sich das so:
In einer Tabelle:
-> Wenn ich nur die Zahl markiere bleibt das alte Problem, die ganze Zahl wird zwar umgewandelt, aber auch tiefgestellt.
-> Wenn ich die ganze Zahl inklusive dem h markiere und ausführe funktioniert die umwandlun, das Format bleibt erhalten, aber die ganze Zahl springt in die nächste Zelle.
Ganz Normaler Text:
-> Wenn ich nur die Zahl markiere geschieht das gleiche wie oben genannt.
-> Wenn ich die ganze Zahl inklusive h markiere kommt genau das hier heraus: 0x 6080h (h tiefgestellt), und vor dem 0x ist kein Leerzeichen mehr.
Trotzdem vielen dank für die schnelle Antwort, Mit dem Code lässt sich bestimmt noch was machen

.
PS. Nehme weitere Vorschläge dankend an:D
MacX182
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 11:40
von MacX182
Hier hab ich noch einen kleinen Ausschnitt von meinem Dokument.
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 12:39
von Stephan
Denn wenn ich das Makro ausführe, wird die ganze umgewandelte Zahl Tiegfestellt.
und nicht nur das - schon als Du das Makro aufgezeichnet hast, also die ganze Vorgehensweise per Hand einmal durchgespielt hast, kann es nicht funktioniert haben, so das ich mich einzig frage warum Du erwartest das ein Makro zu dessen Aufzeichnung Du falsch vorgegangen bist (was für Dich jederzeit amn falschen Resultat sichtbar war) nun quasi von sich aus richtig, jedoch eben dann völlig anders als Du es aufgezeichnet hast funktionieren soll.
Die einfachste, und für jeden nachvollziehbare, Variante wäre: zeichne einfach das Makro richtig auf, d.h. das nach Aufzeichnung das Ergebnis in der Datei aussieht wie es aussehen soll, was bedeutet:
*einmal Pfeil rechts
*einmal Pfeil links
*einmal DEL
*zweimal Pfeil links
*schreibe 0x
vorausgesetzt das FF (wie durch Dich gewünscht) markiert ist UND ZWAR SO das der Cursor am rechten Ende der Markierung steht.
Das ergibt:
Code: Alles auswählen
sub ChangeHex2
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 1
args2(1).Name = "Select"
args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args2())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
rem ----------------------------------------------------------------------
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Count"
args4(0).Value = 1
args4(1).Name = "Select"
args4(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Count"
args5(0).Value = 1
args5(1).Name = "Select"
args5(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args5())
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Text"
args6(0).Value = "0x"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6())
end sub
ist hingegen die Markierung des FF so das sich der Cursor links befindet mußt Du so aufzeichnen:
*einmal Pfeil rechts
*einmal Pfeil links
*schreibe 0x
*zweimal Pfeil rechts
*einmal DEL
alles keinerlei Geheimwissenschaft, keinerlei Programmierkenntnisse nötig sondern nur das Aufzeichnen was ohnehin bei normaler händischer Bearbeitung zum richtigen Ergebnis führt.
Gruß
Stephan
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 12:50
von MacX182
Danke für diesen Vorschlag, aber dieses Makro soll nicht nur für 2 stelige Zahlen sein sondern für beliebig vielstellige Zahlen.
Gibt es einen Befehl , das wenn er das h gelöscht hat an den Anfang der Zahl zu Springen, das man dann dort 0x hinschreiben kann?
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 13:25
von Karolus
Hallo
Versuch mal 2 Durchgänge ->Suchen und ersetzen
1.Suche nach
^([0-9A-Z]*)(h)$
ersetzen durch
0x &@@
[x]reg. Ausdruck
2.Suche nach
h@@$
ersetzen durch
'nichts' im Wortsinn
[x]reg.Ausdruck
Gruß Karo
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 13:30
von MacX182
Den Ansatz hab ich auch schon mal probiert, aber wenn dann so Worte wie z.B. AFFE vorkommen erstzt es die natürlich auch. Bei meinem Versuch habe ich das ganze Dokument durchsuchen lassen, meintest du das auch so, oder Funktioniert das auch nur mit mit dem markierten Bereich?
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 13:32
von Stephan
Gibt es einen Befehl , das wenn er das h gelöscht hat an den Anfang der Zahl zu Springen, das man dann dort 0x hinschreiben kann?
wiederum reicht es lediglich das aufzuzeichnen was Du auch manuell tun würdest
*STG+UMSCHALT+Pfeil Links
*einmal Pfeil rechts
*einmal Pfeil links
Gruß
Stephan
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 14:01
von MacX182
Tausend Dank, Jetzt Funktionierts, allerdings mit STRG + Pfeil Links ohne ALT.
Code: Alles auswählen
sub ChangeHex_2
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 1
args2(1).Name = "Select"
args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoToPrevWord", "", 0, Array())
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Text"
args5(0).Value = "0x"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args5())
end sub
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 14:11
von MacX182
So, jetzt wäre es noch interessant, wenn man prüfen könnte ob der markierte Text auch einer Hex Zahl entspricht. Ich hab mir da mal so nen PreAlpha Code ausgedacht, der aber noch auf den markierten Bereich bezogen werden müsste. Fände es super wenn sich das jemand mal anschaun könnte und verbesserungsvorschläge bringt.
Code: Alles auswählen
function IsHexZahl as boolean
dim i as long
dim hexa as string
for i=0 to 65535 'Hier müsste man die anzahl der zeichen des markierten Textes irgendwie einbringen
hexa = Hex(i)
if hexa = markierter_text then
IsHexZahl = true
exit function
else
IsHexZahl = false
endif
next
end function[
Re: Hex Schreibweise umwandeln
Verfasst: Di, 22.07.2008 23:54
von Karolus
Hallo
MacX182 hat geschrieben:Den Ansatz hab ich auch schon mal probiert, aber wenn dann so Worte wie z.B. AFFE vorkommen erstzt es die natürlich auch.
Aber nur wenn der AFFE mit einem Absatzanfang startet und mit einem h nebst Absatzende endet.
Da Hexadezimalzahlen üblicherweise aus den Ziffern 0 bis 9 und A bis F bestehen kann man den Suchbegriff auch auf:
^[0-9A-F]{,4}h$
einschränken.
Findet nur ganze Absätze, bestehend aus max. 4 Zeichen der Bereiche 0-9A-F gefolgt von einem h
MacX182 hat geschrieben:Bei meinem Versuch habe ich das ganze Dokument durchsuchen lassen, meintest du das auch so, oder Funktioniert das auch nur mit mit dem markierten Bereich?
Sicherheitshalber solltest da das nur auf markierte Bereiche anwenden, natürlich dann zusätzlich mit der Option [x]nur in Selektion.
Gruß Karo
Re: Hex Schreibweise umwandeln
Verfasst: Mi, 23.07.2008 08:44
von MacX182
Vielen danke Karolus,
aber wie man an meinen Beiträgen sieht bin ich in der OOo Welt blutiger Anfänger. Könntest du deinen Vorschlag möglicherweise bissl genauer, z.B mit Code formulieren oder erklären. Diese Lösung ist sicherlich eleganter und man könnte diese Überprüfungsfunktion mit einbauen.
Re: Hex Schreibweise umwandeln
Verfasst: Do, 24.07.2008 13:56
von MacX182
Ich wäre froh über jeden Vorschlag

Re: Hex Schreibweise umwandeln
Verfasst: Fr, 25.07.2008 13:25
von MacX182
Hat keiner eine Idee?