Referenzen

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Referenzen

Post by Horst »

Hallo Leute
Ich wollte mal eine einfache Konsolen App schreiben mit dem VO Dialekt. Sie soll ein CSV öffnen und dann die Daten in eine DBF schreiben. Nun so ein Teil habe ich schon in VO, habe den kleinen Code kopiert und in die Function Start eingebaut. Beim laufen lassen kennt er nun mal als erstes keine DB Server, also muss ich noch eine Lib einbinden. Zur Auswahl stehen nun XSharp.RDD und VO-Compatible RDD Classes Library. Ich habe echt keine Ahnung warum es da 2 gibt :-) und welche ich nun auswählen soll.

Das zweite ist. Mein low level Filehandling mag er auch nicht. Local hptr a s ptr und dann hptr := Fopen () etc Er mag keine Pointer. Wo kann man nachsehen wie man solche Files öffnet und liest ?

Gruss
Horst
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Referenzen

Post by wriedmann »

Hallo Horst,
XSharp.RDD enthält nur die RDDs, aber keinen DBServer.
Du brauchst dafür drei Libs: die XSharp.RDD, die VORDDClasses (enthalten die DBServer-Klasse) und die VOSystemClasses (enthalten die vom DBServer gebrauchte FieldSpec-Klasse).
Was das Filehandling betrifft: am besten arbeitest Du mit dem .NET Filehandling (Namespace System.IO.File).
Die Pointer mag er nur nicht, wenn Du den Applikationstyp auf AnyCPU setzt. Dann musst Du auch den Compiler-Switch /unsafe setzen.
Wenn Du aber im x86-Modus arbeitest, geht es auch ohne (ob das so gewünscht ist, kann ich Dir aber nicht sagen).
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Referenzen

Post by wriedmann »

Hallo Horst,
wie Du mit .NET eine Datei lesen kannst, findest Du u.a. hier:
https://docs.xsharp.it/doku.php?id=read_file
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

Referenzen

Post by SHirsch »

Hallo Horst,

alternativ: Am besten mit dem XPorter das VO Programm auf X# prortieren lassen, dann sollten auch die nötigen Referenzen und Compiler Switches gesetzt sein.

Dann kannst du nach und nach alles auf .NET umbauen.

Stefan
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Referenzen

Post by Horst »

Was wäre dann der XSharp style ?

Local cLine as String
Local oFile as System.IO.StreamReader

// Read the file and display it line by line.
oFile := System.IO.StreamReader("c:test.txt")
do while (cLine = oFile.ReadLine()) != null
// do something
enddo
oFile.Close()

Ich habe dann den XPorter benutzt, der hat das VOSystemClasses vergessen.
Und die kleine App läuft nicht , hat noch
Warnung XS0028 'Dominic Import.Exe.Functions.Start()' has the wrong signature to be an entry point
Das kapier ich auch nicht. Linie -> FUNCTION Start() braucht es da noch was ?
User avatar
SHirsch
Posts: 286
Joined: Tue Jan 30, 2018 8:23 am
Location: Germany

Referenzen

Post by SHirsch »

sieht gut aus. Es ginge sogar noch einfacher

Code: Select all

FUNCTION Start( ) AS VOID
  VAR lines := System.IO.File.ReadAllLines("c:Test.txt")
  FOREACH VAR line IN lines
    // line IS STRING, also 'do something'
  NEXT
RETURN
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Referenzen

Post by Horst »

Hallo Stefan
Dein Beispiel zieht aber das ganze File ins Memory und verarbeitet dann den String als wäre es ein Array. Was passiert da, wen man ein File der grösse eines Telefonbuches öffnet ?
Wo findet man eigentlich die Info wie das File geöffnet wird, Shared oder Exclusive, habe da nichts gesehen. Wo schaut ihr da nach ?
Gruss Horst
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Referenzen

Post by wriedmann »

Hallo Horst,
zumindestens ich gehe davon aus, dass es schneller ist, eine Datei mit auch ein paar MByte in den Speicher zu ziehen, als die Datei zeilenweise zu lesen.
Wenn Du allerdings Dateigrößen > 100 MB erwartest, sollte man vielleicht ein stückweises Lesen einbauen, aber auch nicht gerade Zeile für Zeile.
File.ReadAllLines() öffnet sicher readonly shared, die Datei wird nach dem Lesen auch wieder geschlossen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Referenzen

Post by Horst »

Hallo Wolfgang
Da muss ich mich umgewöhnen und mir das Beispiel von Stefan zu herzen nehmen ;-)

Noch etwas zu den Referenzen. Habe auf meinem WebServer deinen Listener hochgeladen. Nun läuft er ja nicht weil der Server die Dll's von XSharp nicht hat. Kann man die einzeln hinzufügen oder ist es einfacher XSharp dort zu installieren ? Ich bin eher der Typ der nicht unbedingt Sachen installiert die dann eh nicht gebraucht werden. Ich brauch auf dem Server keinen Compiler.
Gruss
Horst
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Referenzen

Post by wriedmann »

Hallo Horst,
Habe auf meinem WebServer deinen Listener hochgeladen. Nun läuft er ja nicht weil der Server die Dll's von XSharp nicht hat. Kann man die einzeln hinzufügen oder ist es einfacher XSharp dort zu installieren ?
Du brauchst gar nichts zu installieren - einfach die benötigten DLLs aus dem Redist-Verzeichnis auf den Server kopieren. Bitte vergiss auch nicht die Macrocompiler-DLLs, sonst gibt es Probleme beim Zugriff auf die Indexe.

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply