Brauche hilfe kann code nicht mehr fortführen

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

Moderator: Moderatoren

nusta88
***
Beiträge: 78
Registriert: Di, 26.06.2007 13:30

Brauche hilfe kann code nicht mehr fortführen

Beitrag von nusta88 »

Erst zeige ich euch mal den Code:

Code: Alles auswählen

Filename = "C:\Programme\CrossConsult\CrossLine\trdoc\tmp\MHABR\abrpos.txt"
oDesktop = createUNOService("com.sun.star.frame.Desktop")

FileNo = Freefile
Open Filename For Input As FileNo
i = 1
oAnfang = 1
Do While not eof(FileNo) Line Input #FileNo, CurrentLine
	If CurrentLine <> "" then 
		olen = len(CurrentLine)
		oText = CurrentLine
		If i = 1 then
			Do until 
			slen = slen + InStr(oAnfang, oText, "	") - 1 
			sTBez = sTBez + Mid(oText, oAnfang, slen) + " VARCHAR(255), "
			oAnfang = slen + 1
  			Loop
  			sSql = "CREATE TABLE abrpos (" & sTBez & ")"
  			oStmt.executeQuery(sSql)
Das Problem ist ich muss das so lange machen bis eigentlich ende der Zeile erreicht ist, aber wie muss ich das angeben? Das zweite Problem wäre bei "VARCHAR(255), ", weil hier immer ein Komma ans Ende gesetzt wird, aber eigentlich sollte dies im letzten String nicht der Fall sein. Sonst wäre eigentlich alles gelöst.
nusta88
***
Beiträge: 78
Registriert: Di, 26.06.2007 13:30

Re: Brauche hilfe kann code nicht mehr fortführen

Beitrag von nusta88 »

Code: Alles auswählen

Filename = "C:\Programme\CrossConsult\CrossLine\trdoc\tmp\MHABR\abrpos.txt"
oDesktop = createUNOService("com.sun.star.frame.Desktop")

FileNo = Freefile
Open Filename For Input As FileNo
i = 1
oAnfang = 1
sDT = 1
Do While not eof(FileNo) Line Input #FileNo, CurrentLine
	If CurrentLine <> "" then 
		olen = len(CurrentLine)
		oText = CurrentLine
		If i = 1 then
			Do until sDT = ""
			slen = slen + InStr(oAnfang, oText, "	") - 1 
			sBez = Trim(Mid(oText, oAnfang, slen))
			sTBez = sTBez + sBez + " VARCHAR(255), "
			oAnfang = slen + 1
			sD = oAnfang
			sDT  = Mid(oText, sD, 1) 
  			Loop
  			sSql = "CREATE TABLE abrpos (" & sTBez & ")"
  			oStmt.executeQuery(sSql)
Ich hab das soweit verbessert, das einzige Problem noch ist, dass immer ein , bei VARCHAR steht. Wie kann ich es verhindern, dass am Ende kein Komma steht?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Brauche hilfe kann code nicht mehr fortführen

Beitrag von komma4 »

...ich verstehe mal wieder das Problem nicht....

Du codierst das Komma doch selbst im gezeigte Beispiel:
ist:

Code: Alles auswählen

 sTBez = sTBez + sBez + " VARCHAR(255), "
soll:

Code: Alles auswählen

 sTBez = sTBez + sBez + " VARCHAR(255) "
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
nusta88
***
Beiträge: 78
Registriert: Di, 26.06.2007 13:30

Re: Brauche hilfe kann code nicht mehr fortführen

Beitrag von nusta88 »

Code: Alles auswählen

 sTBez = sTBez + sBez + " VARCHAR(255), "
Nein so ist das ja eigentlich richtig, aber es ist immer ein Komma vorhanden. Lass mich das so erklären. Dieser Code befindet sich ja in einer Schleife, also wird es paar mal wiederholt je nach Situation. Wenn es dreimal wiederholt wird will ich, das beim dritten mal kein Komma mehr am Ende steht.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Brauche hilfe kann code nicht mehr fortführen

Beitrag von komma4 »

dann musst Du einen Schleifenzähler einbauen und im dritten Durchlauf (if z < 3 ELSE ...) den String anders aufbereiten...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Gödel2607
*
Beiträge: 15
Registriert: Fr, 22.06.2007 11:12
Wohnort: Mannheim

Re: Brauche hilfe kann code nicht mehr fortführen

Beitrag von Gödel2607 »

komma4 hat geschrieben:dann musst Du einen Schleifenzähler einbauen und im dritten Durchlauf (if z < 3 ELSE ...) den String anders aufbereiten...
Das wird so ohne weitere Änderungen nicht gehen, da man ja offenbar im voraus nicht weiß, welches der letzte Durchlauf ist, bei dem das Komma entfallen soll.
Die einfachste Lösung ist vermutlich einfach nach der Schleife die Textvariable um ein Zeichen zu verkürzen, also das letzte Komma einfach abschneiden. Das geht mit left(sTBez,len(sTBez)-1).
Wesentlich eleganter (finde ich) wäre es jedoch, die ganze Konstruktion etwas umzubauen. Ich würde das Komma gesondert am Anfang der Schleife vor die Folgeanweisung setzen. Dann müßte man nur dafür sorgen, daß dies im ersten Durchlauf nicht geschieht. Hierzu könnte man entweder ein flag setzen und auswerten oder aber auf die Länge von sTBez testen. Diese müßte im ersten Durchlauf ja Null sein, wenn nicht vorher etwas mit der Variablen passiert. Dies Anweisung könnte so aussehen:
if sTBez <> "" then sTBez = sTBez + ","

G.
Antworten