Dateien ansprechen

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

Moderator: Moderatoren

brownhack
Beiträge: 3
Registriert: Fr, 24.04.2015 14:46

Dateien ansprechen

Beitrag von brownhack »

Hallo community,

Ich habe ein spezielles Problem. Ich bin Anfänger in Open Office Basic und programmiere gerade ein Makro was bestimmte Daten aus der aktuellen Datei nehemn soll und dann in ein anderes Dokument reinschreiben soll. Bis jetzt funktioniert alles Super, d.h. ich kann die neue Datei erstellen und dort auch etwas in die erste Zelle reinschreiben, jedoch überschreibt der immer die erste Zelle. Jetzt die Frage:
Weiß Jemand wie ich die nächste Zelle reinschreiben kann über das Makro?

Danke im vorraus :)

(Hier ist mein Code)

Code: Alles auswählen

sub Daten_in_neue_Datei_schreiben

rem Variablen Deklaration

	dim zeilen_summe as long
	dim zeile as long
	dim wert as string
	dim wert_arr() as string
	dim wert_holen as string
	dim i as string
	
rem  Anzahl der beschriebenen Zeilen ermitteln

	oCursor = thisComponent.sheets(0).createCursor()
	oCursor.goToEndOfUsedArea(False)  'setzt den cursor in die letzte Zelle (links unten) des benutzen Bereiches
	zeilen_summe = oCursor.getRangeAddress.EndRow + 1
   	i = FreeFile()
   	
rem Zähler, überprüung jeder Zeile 
	For zeile = 0 to zeilen_summe - 1
  
		wert = thisComponent.sheets(0).getCellByPosition(0, zeile).string
		On Error Resume Next
		wert_arr = Split(wert, " ")
		On Error Resume Next

		if isnumeric(wert_arr(0)) then
		
			if thisComponent.sheets(0).getCellByPosition(5, zeile).string <> "" then
				wert_holen = thisComponent.sheets(0).getCellByPosition(5, zeile).string
			endif
			
			if thisComponent.sheets(0).getCellByPosition(6, zeile).string <> "" then
				wert_holen = thisComponent.sheets(0).getCellByPosition(6, zeile).string
			endif
			
			if thisComponent.sheets(0).getCellByPosition(7, zeile).string <> "" then
				wert_holen = thisComponent.sheets(0).getCellByPosition(7, zeile).string
			endif
			
			if thisComponent.sheets(0).getCellByPosition(8, zeile).string <> "" then
				wert_holen = thisComponent.sheets(0).getCellByPosition(8, zeile).string
			endif
			
			open "C:\Users\Praktikant\test.csv" For output as i
			print #i, wert_holen
			
			endif
		close #i
	next
    msgbox "Datenexport erfolgreich abgeschlossen!"

end sub
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dateien ansprechen

Beitrag von clag »

Hallo brownhack,
brownhack hat geschrieben:rem Zähler, überprüung jeder Zeile
For zeile = 0 to zeilen_summe - 1

wert = thisComponent.sheets(0).getCellByPosition(0, zeile).string
On Error Resume Next
wert_arr = Split(wert, " ")
On Error Resume Next

if isnumeric(wert_arr(0)) then


blau und rot passt nicht zusammen

split() liefert Text, darum kann isnumeric(wert_arr(0)) then
niemals wahr sein

je nach Inhalt könnte VAL helfen den String in einen Wert zu wandeln

Code: Alles auswählen

isnumeric(VAL(wert_arr(0))) then
oder auch
CDbl - Konvertiert einen beliebigen numerischen Ausdruck oder einen String-Ausdruck in einen Double-Typ.
CInt - Konvertiert einen beliebigen numerischen Ausdruck oder einen Zeichenkettenausdruck in einen Integer-Typ.
CLng - Konvertiert einen beliebigen numerischen Ausdruck oder einen Zeichenkettenausdruck in einen Long-Integer-Typ.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Dateien ansprechen

Beitrag von Karolus »

@clag
clag hat geschrieben:split() liefert Text, darum kann isnumeric(wert_arr(0)) then
niemals wahr sein
Du täuscht dich isnumeric prüft nicht ob etwas ein Text ist oder nicht, sondern nur ob das übergebene Argument ausschliesslich aus Ziffern mit höchstens eine Dezimalpunkt dazwischen besteht.

Code: Alles auswählen

Sub Main
mytext = "12.3 456"
arr = split(mytext," ")

Print isnumeric( arr(0))
End Sub
gibt True aus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dateien ansprechen

Beitrag von clag »

Hi Karolus, brownhack,

da habe ich mich wohl zu weit aus den Fenster gelehnt und habe "ob der angegebene Ausdruck eine Zahl ist." zu genau genommen,
es müsste dann richtiger Weise heißen "ob der angegebene Ausdruck in eine Zahl gewandelt werden kann"

denn dannenhoefer.de schreibt
isnumeric - Ermittelt, ob der angegebene Ausdruck eine Zahl ist. Wird der Ausdruck als Zahl erkannt, wird True zurückgegeben, andernfalls False.


MS VB info ist da genauer, nur weis ich jetzt nicz ob das 1:1 auch für OO gilt
IsNumeric gibt True zurück, wenn Expression den Datentypen Boolean, Byte, Decimal, Double, Integer, Long, SByte, Short, Single, UInteger, ULong oder UShort entspricht oder ein Object mit einem dieser numerischen Typen ist. Außerdem gibt es True zurück, wenn Expression ein Char oder eine String ist und in eine Zahl konvertiert werden kann.

IsNumeric gibt False zurück, wenn Expression dem Date-Datentyp oder Object-Datentyp entspricht und keinen numerischen Typ enthält. IsNumeric gibt False zurück, wenn Expression ein Char oder eine String ist und nicht in eine Zahl konvertiert werden kann.



@ brownhack
was steht in den überprüften Zellen Zellen ?

trotz Karolus Einwand scheint mir diese Zeile die Hürde zu sein,
stell doch bitte eine Beispieldatei zur Verfügung
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Dateien ansprechen

Beitrag von Karolus »

Wenn du mehrere Einträge in die Textdatei schreiben willst musst du die vor der `for-Schleife` öffnen( open ... und erst hinterher wieder schliessen.( close #i
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
brownhack
Beiträge: 3
Registriert: Fr, 24.04.2015 14:46

Re: Dateien ansprechen

Beitrag von brownhack »

Hallo Karolus,

Vielen Dank, es hat funktioniert :D

MfG
Brownhack
brownhack
Beiträge: 3
Registriert: Fr, 24.04.2015 14:46

Re: Dateien ansprechen

Beitrag von brownhack »

Karolus hat geschrieben:Wenn du mehrere Einträge in die Textdatei schreiben willst musst du die vor der `for-Schleife` öffnen( open ... und erst hinterher wieder schliessen.( close #i
Wenn ich die Datei erneut öffne mit dem Programm fängt mein Makro leider wieder oben an reinzuschreiben, und überschreibt die anderen Daten. Wie kann ich meinem Programm sagen, dass er den Cursor ganz am Ende der Datei ansetzen soll?

Wäre schön wenn ihr einen Lösungsansatz für mich hättet mit dem ich arbeiten könnte.

MfG Brownhack
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Dateien ansprechen

Beitrag von Karolus »

Hallo
Wäre schön wenn ihr einen Lösungsansatz für mich hättet mit dem ich arbeiten könnte.
Das beste wäre wohl dieses grausam schlechte Basic-script wegzuwerfen und eine vernünftige Programmiersprache zu nehmen.

in basic gibts dazu open "C:\blah.txt" for append as #n
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten