01 augustus 2006

Beurs_Koersen programma herschreven in Visual Basic

Jarenlang heb ik al mijn programma’s geschreven met Delphi Pascal programmeer systeem van Borland, wat mij prima beviel.

Echter met de komst van de nieuwe Windows Vista versie zal het Microsoft .NET Framework een belangrijke rol gaan spelen als fundament van alle software die voor de nieuwe Windows systeem geschreven zal worden. Ik gebruik momenteel Delphi versie 7, maar ik heb Delphi 2006 nodig als ik gebruik wil maken van het .NET Framework.

Het kost meer dan 1200 Euro om het eenvoudigste Delphi 2006 systeem aan te schaffen, hetgeen ik te veel vind voor een hobbyist.

Bovendien zal de programmeer afdeling van Borland verkocht worden en zijn er in de loop der jaren al veel goed ontwikkelaars van Borland naar Microsoft verhuisd, bijvoorbeeld Anders Hejlsberg, die Delphi ontwikkelde voor Borland, heeft daarna C# ontwikkeld bij Microsoft en was daar ook sterk betrokken bij hegt .NET platform, wat in feite de gemeenschappelijke bibliotheek van functies is voor alle nieuwe Microsoft programmeertalen. Het is dus maar de vraag of Delphi nog een lang bestaan zal hebben.

Via de HCC werd ik er op geattendeerd dat er gratis een Visual Basic 2005 Express Edition voor hobby programmeurs gedownload kon worden vanaf
http://msdn.microsoft.com/vstudio/express/vb/download/
evenals een bijpassend database systeem, SQL Server Express 2005 edition, dat via een link op deze site op te halen is.

Soortgelijke gratis pakketten zijn beschikbaar voor Visual C#, Visual C++, Visual J# en er is een pakket voor het ontwikkelen van web applicaties met de Visual Basic programmeertaal.

Omdat ik tot 6 jaar gelden met Visual Basic versie 6 moest programmeren om brood op te plank te krijgen en ik toen zeer ontevreden was over die taal, had ik natuurlijk mijn bedenkingen.

Visual Basic versie 6 had een enorme last van 20 jaar historie mee te slepen. Constructies van de begin tijd van de Basic programmeer taal moesten nog steeds in versie 6 uitgevoerd kunnen worden, waardoor de taal omviel van de kromme taalconstructies.

Echter de nieuwe Visual Basic .NET versie heeft al die historie achter zich gelaten, de taal is geheel opnieuw opgebouwd, wat een zeer elegante en gemakkelijk te leren programmeer taal heeft opgeleverd.

Een van de nadelen van Delphi vond ik altijd, dat b.v. na een if then constructie altijd maar één statement gebruikt mocht worden, waardoor je gedwongen werd veel vaak geneste begin end blokken, al of niet afgesloten met een puntkomma, te gebruiken.

In Visual Basic .NET is dat op de zelfde elegante wijze als in de programmeer taal Modula-2, mijn favoriete taal van de jaren tachtig, opgelost: if then end if, waarbij je tussen then en end if meerdere statements mag zetten.

In Visual Basic .NET zijn objecten zeer consequent toegepast. Een integer en een string zijn bijvoorbeeld beide een object en string functies zijn dus methoden van een object, die achter de naam van het object komen, gescheiden door een punt. Dit, samen met de IntelliSense voorstellen van de Visual Basic programmeer omgeving om de code af te maken, zorgt ervoor dat je betrekkelijk weinig zelf hoeft in te typen.

Als vergelijking geeft ik hieronder een stukje code in beide talen: Het is een functie die woorden uit een zin ophaalt. Er zijn wat verschillen in implementatie omdat in Delphi de index van het eerste character in een string de waarde 1 heeft, terwijl dat in Visual Basic .NET 0 is

De Delphi code:


function NextWordInString(const Source: string; var Start: Integer; var SpaceAtEnd: boolean): string;
var
 i: integer; n: integer;
 Ch: char;
 NonSpaceCharFound: boolean
begin
 n:= Length(Source);
 if (Start = 0) or (Start > n) then
 begin
  Start:= 0;
  NextWordInString:= '';
  exit;
 end;
 NonSpaceCharFound:= False;
 SpaceAtEnd:= True;
 for i:= Start to n do
 begin
  Ch:= Source[i];
  if NonSpaceCharFound then
  begin
   if Ch <= ' ' then
    break;
  end
  else if Ch > ' ' then
   NonSpaceCharFound:= True
  else if Ch < ' ' then
   break;
 end;
 NextWordInString := MidStr(Source, Start, i - Start);
 Start:= i;
 i:= 0;
 while (Start <= n) and (MidStr(Source, Start,1) < ' ')and (i < 2) do
 begin
  Start:= Start + 1; // Skip one LF/CR combination
  SpaceAtEnd:= False;
  i:= i + 1;
 end;
end;


De overeenkomstige Visual Basic .NET code:


Function NextWordInString(ByVal Source
As String, ByRef Start As Integer,ByRef SpaceAtEnd As Boolean) As String
  Dim i As Integer, n As Integer, Ch As Char
  Dim NonSpaceCharFound As Boolean = False
  n = Source.Length
  If (Start < 0) Or (Start > n) Then
    Start = -1
    NextWordInString = ""
    Exit Function
  End If

  SpaceAtEnd = True
  For i = Start To n - 1
    Ch = Source.Chars(i)
    If NonSpaceCharFound Then
      If Ch <= " " Then
        Exit For
      End If

    ElseIf Ch > " " Then
      NonSpaceCharFound = True
    ElseIf Ch < " " Then
      Exit For
    End If
  Next

  NextWordInString = Source.Substring(Start, i - Start)
  Start = i
  i = 0
  While (Start < n-1) AndAlso (Source.Substring(Start,1)<" ") AndAlso (i < 2)
    Start = Start + 1 ' Skip one LF/CR combination
    SpaceAtEnd = False
    i = i + 1
  End While
End Function
 


Als oefen object heb ik mijn programma Beurs_Koersen dat in Delphi versie 7 geschreven was, opnieuw geprogrammeerd in Visual Basic 2005 Express Edition. Die klus was in betrekkelijk korte tijd geklaard, mede omdat ik door de geweldige hoeveelheid kant en klare functies die beschikbaar waren in het .NET Framework, zelf minder hoefde te programmeren dan in de Delphi versie nodig was. Qua mogelijkheden komt de gratis Visual Basic 2005 Express Edition minstens overeen met de zeer prijzige Delphi software!

Het enige dat mij wat tegenviel was de Publish functie waarmee je een setup file van het programma maakt. Je kunt eigenlijk niets wijzigen aan het installatie proces en de executable wordt niet zoals gebruikelijk in een Program File map geïnstalleerd. Daarom heb ik voor het maken van de setup file nog maar gebruik gemaakt van de vertrouwde InstallShield Express versie die bij Delphi geleverd werd.

Het resultaat van die conversie is een BeursKoersen programma dat eenvoudiger te onderhouden en met meer functionaliteit:



  • Er kunnen nu koersen van de Morningstar website opgehaald worden, waardoor de koersen van vrijwel elk beleggingsfond opgehaald kan worden. De ABN-AMRO site die daar al gebruik van maakte is komen te vervallen.

  • Als er op de MSN site meerdere portefeuilles gebruikt worden, dan kunt U nu door 'Alle rekeningen' te selecteren, al de koersen voor alle portefeuilles ophalen.

  • Via de Yahoo finance site kunnen nu alle velden in de CSV file gevuld worden.

  • U kunt het programma nu ook gebruiken als een webbrowser. U kunt gebruik maken van Uw zoekmachine en U kunt Uw standaard homepage selecteren.

  • Via een nieuw Opties scherm kunt U opties voor de conversie selecteren, de werkmap wijzigen en verkennen, het tijdsinterval voor het vernieuwen van webpagina's instellen en de logfile bekijken en verwijderen.

  • De file Effecten.txt kan nu in een tabel bekeken, gesorteerd en gewijzigd worden.

  • De laatste 11 websites, die alleen informatie geven, kunt U nu op een eenvoudige wijze vervangen door Uw eigen keuzes.


U kunt het programma dowloaden vanaf mijn download pagina.