Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 06.10.2005, 15:47 Titel: Migration von VBA zu FB: Date, Format |
|
|
Hallo,
ich bin am Umschreiben eines Windows-Excel-VBA-Function-Moduls als FB-.DLL.
Mit Grausen stellte ich bis jetzt fest:
1) Es gibt keinen Typ Date (das macht viel Arbeit)
2) Es gibt kein Boolean (weniger schlimm)
3) Es gibt keine Funktion Format, die Zahlen als Strings mit gewünschtem Format ausgibt (lästig)
Fragen:
a) stimmt das alles so?
b) muß man Libs dazu linken oder kann man WIN-APIs ansprechen? Welche? Wie diese ansprechen?
c) um das Einbinden großer Libs zu umgehen: hat einer vielleicht schon eigene Functions geschrieben zur Formatierung oder Datum als String?
Vielen Dank für Feedback! Gruß Alexander |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 06.10.2005, 16:16 Titel: |
|
|
OK, vielleicht wirds ja ein Gemeinschaftserlebnis:
1) Im folgenden wird eine Excel-Datumseriennummer (bei Excel nur > (31.12.1899 = 0), in meiner Funktion nur > (31.12.1901 = 731)) in einen Datumstring deutscher Schreibweise verwandelt. Die Rückwärtswandlung liefere ich evtl. nach.
Code: |
Function XLDatToStr(Datum As Integer)
Dim Mo(12), i, Jahre, Monate, Tage
Jahre = Int((Datum - 1) / 365.25)
Tage = Datum Mod (IIf(Jahre > 0, Jahre * 365, 1)) - _
Int(Jahre / 4) - IIf(Int(Jahre / 4) = Jahre / 4, 0, 1)
If Jahre Mod 4 = 0 Then Mo(2) = 29 Else Mo(2) = 28
For i = 1 To 13 Step 1.84: Mo(i) = 31: Next
For i = 4 To 11 Step 2.3: Mo(i) = 30: Next: i = 0
Do
i = i + 1
Tage = Tage - Mo(i)
Loop Until Tage < 1
Tage = Tage + Mo(i)
Monate = i
DatStr = Tage & "." & Monate & "." & Jahre + 1900
End Function
|
2) k.K.
3) An rudimentierer Formatierung versuche ich mich auch mal. Kann natürlich gern hier erweitert werden
Gruss Alexander |
|
Nach oben |
|
|
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 06.10.2005, 16:30 Titel: Re: Migration von VBA zu FB: Date, Format |
|
|
ooops hat Folgendes geschrieben: | 1) Es gibt keinen Typ Date (das macht viel Arbeit)
2) Es gibt kein Boolean (weniger schlimm)
3) Es gibt keine Funktion Format, die Zahlen als Strings mit gewünschtem Format ausgibt (lästig) |
ooops hat Folgendes geschrieben: | a) stimmt das alles so? |
Jein
- du kannst "double" als Ersatz für "date" verwenden
- stimmt
- es gibt eine FORMAT$-Funktion seit FB0.15testing
ooops hat Folgendes geschrieben: | b) muß man Libs dazu linken oder kann man WIN-APIs ansprechen? Welche? Wie diese ansprechen? |
Code: | #include "vbcompat.bi"
dim x as double
x = dateserial( 1990, 12, 31 )
x = datevalue("31.12.1990" ) ' WICHTIG: Länder-spezifisch
x = dateadd("yyyy",1,x) ' Addiert 1 Jahr |
ooops hat Folgendes geschrieben: | c) um das Einbinden großer Libs zu umgehen: hat einer vielleicht schon eigene Functions geschrieben zur Formatierung oder Datum als String? |
Ja, ich. Siehe FB's FORMAT$:
Code: | #include "vbcompat.bi"
PRINT FORMAT$(dateserial(1990,12,31), "ddddd")
' Ausgabe in Deutschland: 31.12.1990
' Ausgabe in US: 12-31-1990 |
Da hebe ich mir extra so viel Arbeit gemacht und keiner merkt das ... grummel ...
Gruß,
Mark |
|
Nach oben |
|
|
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 06.10.2005, 17:01 Titel: |
|
|
Hallo Mark,
1) wo ist denn Deine vbcompat.bi zu bekommen? Bei IDE+FBC-Download ist sie anscheinend nicht dabei und auf der FreeBasic-Seite fand ich keinen Hinweis darauf.
2) k.K.
3) FORMAT$ in FB0.15: Das ist ja schön!
Gruß Alexander |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.10.2005, 17:24 Titel: |
|
|
man kann wenn man lustig ist statt format$ auch mal print using probieren.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 06.10.2005, 17:35 Titel: |
|
|
Es soll aber nicht am Bildschirm ausgegeben werden, sondern in einen String. Und in 0.15 solls ja gehn.
Gruss Alexander |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.10.2005, 17:39 Titel: |
|
|
Dann schreib halt mit PRINT USING in eine Datei und lade den String daraus
jb |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.10.2005, 17:53 Titel: |
|
|
Hallo!
@jb:
Das habe ich früher immer mit Strings gemacht in den nur Zahlen enthalten sind! Aufwändig! Da kannte ich VAL noch nicht!
Greetings,
Mao _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 06.10.2005, 18:27 Titel: |
|
|
Hier noch die Datumfunktionen (funktionieren, wie gesagt, erst ab 1902) Code: | Function XLDatumToString(Datum As Long)
Dim i, Jahre, Monate, Tage
Dim Feb As String, Mo As String
Jahre = Int((Datum - 1) / 365.25)
Tage = Datum Mod (Jahre * 365) - _
Int(Jahre / 4) - IIf(Int(Jahre / 4) = Jahre / 4, 0, 1)
If Jahre Mod 4 = 0 Then Feb = "9" Else Feb = "8"
Mo = "312" & Feb & "31303130313130313031"
Do
i = i + 1
Tage = Tage - CInt(Mid$(Mo, i * 2 - 1, 2))
Loop Until Tage < 1
Tage = Tage + CInt(Mid$(Mo, i * 2 - 1, 2))
Monate = i
XLDatumToString = Format$(Tage, "00") & "." & _
Format$(Monate, "00") & "." & _
Right$(Format$(Jahre + 1900, "0000"), 4)
End Function
Function StringToXLDatum(Text As String)
Dim Tag, Monat, Jahr, i
Dim Feb As String, Mo As String
Tag = CInt(Left$(Text, 2))
Monat = CInt(Mid$(Text, 4, 2))
Jahr = CInt(Right$(Text, 4)) - 1900
If Jahr Mod 4 = 0 Then Feb = "9" Else Feb = "8"
Mo = "312" & Feb & "31303130313130313031"
For i = 1 To Monat - 1: Tag = Tag + CInt(Mid$(Mo, i * 2 - 1, 2)): Next
StringToXLDatum = CStr(Tag + Jahr * 365 + Int(Jahr / 4) + 1)
End Function
Sub u()
MsgBox StringToXLDatum("01.01.1999")
End Sub
Sub w()
MsgBox XLDatumToString(800)
End Sub |
|
|
Nach oben |
|
|
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 06.10.2005, 19:59 Titel: |
|
|
ooops hat Folgendes geschrieben: | 1) wo ist denn Deine vbcompat.bi zu bekommen? Bei IDE+FBC-Download ist sie anscheinend nicht dabei und auf der FreeBasic-Seite fand ich keinen Hinweis darauf. |
Einfach die aktuelle 0.15testing-Version downloaden. Da ist das dabei (im inc/ Verzeichnis). Die "vbcompat.bi" habe ich zwar geschrieben (ebenso wie alle anderen VB-kompatiblen DATE/TIME-Funktionen, ebenso wie FORMAT$), gehört aber zur Standard.FB-Distribution. Bin schliesslich nicht umsonst dort einer der Entwickler .
Gruß,
Mark |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 06.10.2005, 20:10 Titel: |
|
|
Hallo,
hier habe ich die erweiterten Date und Time Funktionen aus FB - 0.15 beschrieben:
http://forum.qbasic.at/viewtopic.php?p=16168
Leider ist der Link auf eine FB-Installation von mjs nicht mehr aktuell (dort waren alle nötigen Dateien enthalten).
@mjs, gibt es einen neuen "snapshot of CVS" mit den Date-Funktionen?
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 06.10.2005, 23:44 Titel: |
|
|
Ich habe mal eben eine installierbare CVS-Version zusammengestellt:
Download FB_Win32_20051006.exe
Diese Version ist "komplett" in dem Sinne, dass keine vorherige 0.14b-Installation benötigt wird. Ausserdem braucht man die "INSTALL.BAT"-Datei nicht mehr aufzurufen. Das wird bei der Installation automatisch erledigt. Ausserdem ist FB hier auch deinstallierbar.
Und nun wünsche ich viel Spass damit.
Gruß,
Mark |
|
Nach oben |
|
|
JJ2005
Anmeldungsdatum: 29.09.2005 Beiträge: 11 Wohnort: Brüssel
|
Verfasst am: 07.10.2005, 11:23 Titel: |
|
|
mjs hat Folgendes geschrieben: | Ich habe mal eben eine installierbare CVS-Version zusammengestellt:
Download FB_Win32_20051006.exe
Diese Version ist "komplett" in dem Sinne, dass keine vorherige 0.14b-Installation benötigt wird. Ausserdem braucht man die "INSTALL.BAT"-Datei nicht mehr aufzurufen. Das wird bei der Installation automatisch erledigt. Ausserdem ist FB hier auch deinstallierbar.
Und nun wünsche ich viel Spass damit.
Gruß,
Mark |
Nach der Installation (vorher lief's!) motzt FB bei manchem Beispielprogramm folgende Zeile in winbase.bi an:
type FILETIME
dwLowDateTime as DWORD
dwHighDateTime as DWORD
end type
Da dies die allererste type-Deklaration in winbase.bi ist, vermute ich, dass es nicht die letzte Fehlermeldung sein wird...
Muss man v014 vorher komplett de-installieren?
Hier ein Beispiel:
#include "win\winbase.bi"
MessageBox(0,"This is a test","Titel",MB_OK)
Das produziert folgende Fehlermeldung:
D:\FreeBASIC\inc\win\winbase.bi(513) : error 14: Expected identifier, found: 'DWORD'
dwLowDateTime as DWORD
^ |
|
Nach oben |
|
|
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 07.10.2005, 12:00 Titel: |
|
|
Kann ich hier nicht nachvollziehen.
Ich habe folgende Schritte durchgeführt:
- FreeBASIC nach C:\Programme\FreeBASIC (neues Verzeichnis) installiert
- Shell über das FreeBASIC-Icon gestartet
- CD examples\Windows\gui
- fbc hello.bas
->Fehlerfrei
EDIT: Nicht "win/winbase.bi" direkt einbinden. Statt dessen bitte "windows.bi" nutzen!
Gruß,
Mark |
|
Nach oben |
|
|
JJ2005
Anmeldungsdatum: 29.09.2005 Beiträge: 11 Wohnort: Brüssel
|
Verfasst am: 07.10.2005, 14:33 Titel: |
|
|
mjs hat Folgendes geschrieben: |
EDIT: Nicht "win/winbase.bi" direkt einbinden. Statt dessen bitte "windows.bi" nutzen!
Gruß,
Mark |
Funzt, danke! Also, nochmals für alle: bis gestern war's
'$include once:'win\kernel32.bi'
'$include once:'win\user32.bi'
... ab sofort
'$include once:'windows.bi'
oder
#include "windows.bi" |
|
Nach oben |
|
|
|