Gemischtes / mishmash

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
User avatar
Horst
Posts: 327
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post 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
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 327
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post 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
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 327
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post 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
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
RGreim4XS
Posts: 41
Joined: Sat Feb 08, 2020 7:47 am

Gemischtes / mishmash

Post 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
User avatar
Horst
Posts: 327
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post 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
User avatar
wriedmann
Posts: 3644
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 327
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post 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 ;-)
Post Reply