Page 1 of 9
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 8:46 am
by Horst
Hallo Leute
Ich habe mal ein Topic Gemischtes eröffnet, möchte nicht für jede Frage ein Topic aufmachen nur weil ich im .Net ein Frischling bin und sicher noch ein paar 'dämliche' Fragen habe.
Erste Frage: Es gibt da zwei Arten von String , einmal String [] und dann den 'normalen' String. Ein File:ReadAllLines erzeugt einen [] String, ich brauche aber einen ganz normalen
Jetzt müsste ich das doch in eine String umwandeln. Wie ?
Wäre da meine alte Clipper Routine nicht von Anfang an schneller/einfacher ? Wen ich sie in eine Function packe wie
myReadAllLines (cFile)
Btw ich brauche einen String um später einen oder mehrere strtran () zu machen und dann einen
bBuffer := System.Text.Encoding.UTF8:GetBytes( cString ) zu füllen - um es an den Browser zurückzuschicken.
Aber vielleicht kann man das alles auch mit StringArrays ?
nHandle := FOpen( oFileSpec:fullPath, FO_READ+FO_SHARED ) // ASCII öffnen ...
IF nHandle != F_ERROR
cBuffer := Buffer( oFileSpec:size )
FRead3 ( nHandle, PTR( _CAST, cBuffer ), oFileSpec:size )
FClose ( nHandle )
Gruss
Horst
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 8:57 am
by wriedmann
Hallo Horst,
ein "string[]" ist KEIN String, sondern ein Array von Strings.
File.ReadAllLines() gibt Dir ein Array von Strings zurück, wobei jeder String einer Zeile entspricht.
Zu .NET Array siehe hier:
https://docs.xsharp.it/doku.php?id=net_array
Anders als VO Arrays sind diese nicht in der Größe änderbar.
Klar kannst Du das alles auch mit VO-Funktionen machen, die kapseln die .NET -Funktionalitäten.
Wolfgang
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 10:57 am
by Horst
Hallo
Wolfgang, das mit den StringArrays las ich jetzt und umgehe die wo immer ich nur kann
Ich weiss nicht für was man eine StringArray gebrauchen kann. Entweder ich hab einen Array oder einen String.
Habe nun die myReadAllLines geschrieben. Habe aber das Problem , dass ich FileSpec benutze und nicht herrausfinde in welcher Resource sie ist grrrr. Gibt es da eine Liste in der man nachschauen kann ? ich kann doch nicht jedesmal eine Resource nach der anderen reinholen und schauen obs dann funktioniert. Da gibts doch sicher ne schlaue Lösung.
Dann dachte ich mir ich mache es mit Streamreader, dass geht aber nicht weil ich aus Erfahrung weiss, dass die Datei fürs schreiben gesperrt wird bis der Streamreader geschlossen wird. Wo kann man nachschauen wie so ein Streamreader eine Datei öffnet ? Und kann man das beeinflussen ?
Gruss
Horst
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 11:05 am
by wriedmann
Hallo Horst,
das mit den StringArrays las ich jetzt und umgehe die wo immer ich nur kann ;-)Ich weiss nicht für was man eine StringArray gebrauchen kann. Entweder ich hab einen Array oder einen String.
ein String[] ist ein Array aus strings, und sehr wohl zu gebrauchen: wenn Du nämlich eine Datei zeilenweise abarbeiten musst. Ansonsten würde ich File.ReadAllText() verwenden:
https://docs.microsoft.com/en-us/dotnet ... eadalltext
Habe aber das Problem , dass ich FileSpec benutze und nicht herrausfinde in welcher Resource sie ist grrrr.
Das verstehe ich jetzt nicht ganz.... FileSpec ist eine VO-Klasse.
Für das shared Öffnen einer Datei gibt es hier eine Lösung:
https://stackoverflow.com/questions/124 ... write-mode
Wolfgang
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 1:47 pm
by Horst
Hallo
Ich müsste : LOCAL oFileSpec AS Vo.FileSpec - machen. FileSpec als solches geht nicht.
Als neuer Weg wäre:
FileStream := FileStream{cFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite}
cBuffer := System.IO.StreamReader{ FileStream}:ReadToEnd()
FileStream:Close ()
Richtig ??
Gruss Horst
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 2:39 pm
by wriedmann
Hallo Horst,
Geht auch ohne:
Wie VO mit der Compiler-Option implicit namespace, oder wie c# mit einem using VO am Beginn des Quellfiles.
Wolfgang
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 2:47 pm
by RGreim4XS
Hallo Horst,
zwar etwas VFP lastig,...
So hab ich’s früher gelöst, zumindest das, was cr/lf hatte.
1. Datenbank anlegen : 1 Feld Line C 240
2, Dann Append from ...
3. Und dann scan / Endscan...
Klappt nicht immer, aber ich verstehs noch. Die Komfortversion ist dann das ganze in ein Arrry einzulesen, oder mit SQLite eine In Memory Tabelle anzulegen, das spart aufräumen.
Natürlich sollte man damit keine riesen Logfiles schaufeln. Das geht besser mit Logstash ( siehe ELK-Stack)
Gruß from the Sunny Alb near Ulm
Rainer
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 3:37 pm
by Horst
Hallo Wolfgang und Rainer
Ich check das nicht. Ich gebe ja oben im PRG an mit #using VOSys.....welche Assembly er nutzen soll. Warum muss ich da noch einen Schalter auf on stellen ? So wie ich das sehe hat die FileSpec den Namen gewechselt auf Vo.FileSpec
Rainer, ich lese ein HTML File ein , verändere es mit StrTran () an sagen wir 20 Stellen und schick es dann an den Browser. Glaub mir, du verlierst eine riesige Menge an Zeit wen du noch die DBF's ins Spiel bringst.
VPF - sehe erst seit kurzem VPF Code, sieht aus wie Clipper
Gruss
Horst
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 4:36 pm
by wriedmann
Hallo Horst,
wegen using und dependencies: siehe hier:
https://docs.xsharp.it/doku.php?id=name ... _reference
Welche Assemblies Dein Programm nutzen soll, gibst Du in den References an.
Das hat nichts mit dem using zu tun - das gibt nur an, welche Namespaces nicht extra angegeben werden müssen.
Alle VO-Funktionen und Klassen sollten sich im Namespace VO befinden, unabhängig davon, in welcher Assembly sie definiert sind.
Damit aber bestehender VO-Code funktioniert, der keine Ahnung von Namespaces hat, gibt es eine Compiler-Option "/ins" - Use implicit namespace. Die erspart diese Angabe.
Wenn Dir das mit den Namespaces noch nicht klar ist, werde ich Dir ein Sample bauen.
Wolfgang
Gemischtes / mishmash
Posted: Sat Feb 22, 2020 5:18 pm
by Horst
Hallo Wolfgang
Irgendwie reden wir aneinander vorbei oder ich habs noch nicht kapiert.
Xide. Grüne Referenzliste habe ich zB drin System.Io und alle Vo Dlls.
In einem Programm kann ich nun zB schreiben System.Io.File.Open (blabla) oder ganz oben im Prg File steht #using System.Io
Dann schreibe ich nur File.Open (blabla).
So nun hatte ich das auch mit FileSpec gemacht. In die 'grüne' Referenzliste alle VoDlls und dann im Prg oben #using VoSystemClasses ergo müsste ich doch FileSpec ohne Vo.FileSpec nutzen können. Oder wo mache ich den Denkfehler ?
Gruss
Horst
PS Trinke gerade ein Glas Rotwein aus der Toscana. Beneide dich ein wenig. Italienische Küche ist was vom Feinsten