Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Migration von VBA zu FB: Date, Format

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 06.10.2005, 15:47    Titel: Migration von VBA zu FB: Date, Format Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 06.10.2005, 15:53    Titel: Antworten mit Zitat

Hallo.

Kurz und knapp:

a) Ja.

b) Du musst nichts einbinden, kannst aber alle Funktionen der WinAPI nutzen, wenn du möchtest: Angefangen bei GetShortPath bis hin zu winmm's Multimediafunktionen.

c) Ich nicht. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 06.10.2005, 16:16    Titel: Antworten mit Zitat

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 lächeln

Gruss Alexander
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 06.10.2005, 16:30    Titel: Re: Migration von VBA zu FB: Date, Format Antworten mit Zitat

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
  1. du kannst "double" als Ersatz für "date" verwenden
  2. stimmt
  3. 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 ... Kopf schütteln

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 06.10.2005, 17:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 06.10.2005, 17:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 06.10.2005, 17:35    Titel: Antworten mit Zitat

Es soll aber nicht am Bildschirm ausgegeben werden, sondern in einen String. Und in 0.15 solls ja gehn.
Gruss Alexander
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.10.2005, 17:39    Titel: Antworten mit Zitat

Dann schreib halt mit PRINT USING in eine Datei und lade den String daraus zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 06.10.2005, 17:53    Titel: Antworten mit Zitat

Hallo!

@jb:
Das habe ich früher immer mit Strings gemacht in den nur Zahlen enthalten sind! Aufwändig! mit den Augen rollen Da kannte ich VAL noch nicht! peinlich

Greetings,
Mao
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 06.10.2005, 18:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 06.10.2005, 19:59    Titel: Antworten mit Zitat

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 Zunge rausstrecken .

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 06.10.2005, 20:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 06.10.2005, 23:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
JJ2005



Anmeldungsdatum: 29.09.2005
Beiträge: 11
Wohnort: Brüssel

BeitragVerfasst am: 07.10.2005, 11:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 07.10.2005, 12:00    Titel: Antworten mit Zitat

Kann ich hier nicht nachvollziehen.

Ich habe folgende Schritte durchgeführt:

  1. FreeBASIC nach C:\Programme\FreeBASIC (neues Verzeichnis) installiert
  2. Shell über das FreeBASIC-Icon gestartet
  3. CD examples\Windows\gui
  4. fbc hello.bas
    ->Fehlerfrei


EDIT: Nicht "win/winbase.bi" direkt einbinden. Statt dessen bitte "windows.bi" nutzen!

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
JJ2005



Anmeldungsdatum: 29.09.2005
Beiträge: 11
Wohnort: Brüssel

BeitragVerfasst am: 07.10.2005, 14:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz