Hex Schreibweise umwandeln

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Hex Schreibweise umwandeln

Beitrag 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
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Hex Schreibweise umwandeln

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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 :D .

PS. Nehme weitere Vorschläge dankend an:D

MacX182
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag von MacX182 »

Hier hab ich noch einen kleinen Ausschnitt von meinem Dokument.
Dateianhänge
PCS_Auschnitt.odt
(13.38 KiB) 41-mal heruntergeladen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Hex Schreibweise umwandeln

Beitrag 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
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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?
Karolus
********
Beiträge: 7534
Registriert: Mo, 02.01.2006 19:48

Re: Hex Schreibweise umwandeln

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Hex Schreibweise umwandeln

Beitrag 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
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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[
Karolus
********
Beiträge: 7534
Registriert: Mo, 02.01.2006 19:48

Re: Hex Schreibweise umwandeln

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag 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.
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag von MacX182 »

Ich wäre froh über jeden Vorschlag :D
MacX182
*
Beiträge: 12
Registriert: Di, 22.07.2008 09:34

Re: Hex Schreibweise umwandeln

Beitrag von MacX182 »

Hat keiner eine Idee?
Antworten