fbpx
Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen

TOPIC:

Gemischtes / mishmash 22 Feb 2020 09:46 #13374

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • 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

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 09:57 #13375

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • 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: 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

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 11:57 #13376

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • 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

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 12:05 #13377

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • 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: docs.microsoft.com/en-us/dotnet/api/system.io.file.readalltext

    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:
    stackoverflow.com/questions/12478512/how...-sharedenywrite-mode

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 14:47 #13380

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • 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

    Please Log in or Create an account to join the conversation.

    Last edit: by Horst.

    Gemischtes / mishmash 22 Feb 2020 15:39 #13381

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • 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

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 15:47 #13382

  • RRG4XS's Avatar

  • RRG4XS


  • Posts: 23
  • 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

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 16:37 #13383

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • 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

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 17:36 #13384

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • Hallo Horst,
    wegen using und dependencies: siehe hier: docs.xsharp.it/doku.php?id=namespace_assembly_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

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 18:18 #13385

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • 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 ;-)

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 18:22 #13386

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • Hallo Horst,
    ok, dann versuche ich das besser zu erklären:
    die FileSpec-Klasse ist im Namespace "VO" definiert.
    Also musst Du oben ein
    using VO
    angeben.
    Probiers mal, in der Zwischenzeit schreibe ich Dir ein Sample zusammen.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 18:28 #13387

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • Hallo Horst,
    schau mal diesen Code an:
    begin namespace Toscana
    class Rotwein
    end class
    end namespace
    
    begin namespace Rheintal
    class Rotwein
    end class
    end namespace
    Du wirst es nicht glauben, aber das ist gültiger Code! Und das kannst Du gerne in eine DLL mit Namen Weine.dll packen.
    In Deinem Exe kannst Du dann die weine.dll in die References einfügen. Damit kann Deine Applikation auf die beiden Klassen zugreifen.
    Und um die zu verwenden
    using Toscana
    function Trinken()
    local oWein as Rotwein // Toscana.Rotwein
    local oWeinD as Rheintal.Rotwein
    
    oWeinD := Rotwein{} // Fehler!!!!! Falsche Klasse
    
    return

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Last edit: by wriedmann.

    Gemischtes / mishmash 22 Feb 2020 18:32 #13388

  • RRG4XS's Avatar

  • RRG4XS


  • Posts: 23
  • Hallo Horst, also html rein, placeholder suchen, html raus...
    sowas wie Strtran...
    Da aber Computer heute Speicher in GB angeben, hab ich mal gelernt, erst alles einlesen und erst dann umbauen, und dann den Speicher wieder als ein Block zurückschreiben... Remember the old Posix Times.. ( FRead, FWrite...)

    Timing usw: wenns ein echter HTML Baum ist, würd ich gleich mit .net Bordmitteln anfangen,den baum zu lesen, zerlegen und neu schreiben....
    Such mal nach „parsing html files with c#
    Soll ja auch etwas Objectorientierung rein...

    Na VFP und Clipper haben in Teilen die gleichen Wurzeln.
    Bin nach S87 erst zu DBÜ ( Xbase nach C) und weils nicht mehr weiterging zu FP aber Windows erst richtig mit VFP5...

    Gruß Rainer

    Please Log in or Create an account to join the conversation.

    Last edit: by RRG4XS.

    Gemischtes / mishmash 22 Feb 2020 18:32 #13389

  • RRG4XS's Avatar

  • RRG4XS


  • Posts: 23
  • Hallo Horst, also html rein, placeholder suchen, html raus...
    sowas wie Strtran...

    Timing usw: wenns ein echter HTML Baum ist, würd ich gleich mit .net Bordmitteln anfangen,den baum zu lesen, zerlegen und neu schreiben....
    Such mal nach „parsing html files with c#
    Soll ja auch etwas Objectorientierung rein...

    Na VFP und Clipper haben in Teilen die gleichen Wurzeln bin...
    Bin nach S87 erst zu DBÜ ( Xbase nach C) und weils nicht mehr weiterging zu FP aber Windows erst richtig mit VFP5...

    Gruß Rainer

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 19:01 #13390

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • Hallo Rainer
    Ja dann haben wir die gleichen Wurzeln. Ich zuerst dBaseII (CP/M), dann Clipper bis Vo kam. Und damals gabs da (ca. 1990) iLink mit einer Baudarte von 300 , das Steinzeit Internet mit mit einer Menge an Clipper Experten, da bekam ich Antworten aus Übersee. Echt geile Zeit. Aber auch jetzt mit XSharp. Finde es super, dass das Team sowas auf die Beine stellt.
    Gruss Horst

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 19:15 #13391

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • Hallo Wolfgang
    Ich sehe du hast Humor ;-)
    Meine Frage ist nun wo sehe ich , dass der Namespace den namen VO hat ? Es sagt mir ja niemand ausser du ;-) , das es der Namespace VO ist. Ich dachte, ich muss mit #using VoSytemsClasses den Namespace angeben. Weil , wen ich die rechte Maustaste klicke kommt - add using <namespaces> from referneces - und dann hatte ich 2 Möglichkeiten entweder VO oder VOSystemClasses.
    Da ich nun sah das Filespec in VO SystemClasses ist, habe ich das ausgewählt.

    Aber nun weiss ich, dass aller guter Wein (immer Namespace VO) aus der Toscana kommt, ;-)
    Gruss
    Horst

    und allen ein schönes Wochenende !

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 19:24 #13392

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2411
  • Hallo Horst,
    dass die VO-Klassen und Methoden weitgehend in diesem Namespace angesiedelt sind, sollte die Doku sagen. Und wenn Du siehst, dass die Klasse eigentlich VO.FileSpec heißt, dann weißt Du, dass VO der Namespace ist und FileSpec die Klasse.
    VOSystemClasses ist die Assembly, aber nicht der Namespace.
    Das sind zwei verschiedene Dinge, und eine Assembly kann durchaus auch mehrere Namespaces beinhalten (z.B. die System.DLL), genau wie ein Namespace in mehreren Assemblies verwendet werden kann.
    Das sagt entweder die Doku oder ILSpy <g>.
    Wolfgang
    P.S. dass der beste Wein aus der Toskana kommt, würde ich so nicht behaupten - es gibt nicht nur in Italien, sondern auch im Rest dser Welt Weingüter, die hervorragende Weine produzieren.
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 22 Feb 2020 20:09 #13393

  • RRG4XS's Avatar

  • RRG4XS


  • Posts: 23
  • Hallo Horst,
    die CPM Zeiten kenn ich auch noch STAT DSK, und auch Multiuser Varianten von ICL und Co. Aber dann kam mein erster PC (IBM), und ich hab andächtig DBASE programmiert, bis mein Chef endlich Clipper und Nantucket Tools spendiert hat. Da ich viel mit Schnittstellen hantieren musste, bin ich dann zu DBÜ , xbase Code und dann mittendrin inline, hier kommt c, endinline hat schon was. Und so kam man zu Borland und MS.
    Mein CBM 3000 ist immer noch in meinem Büro.
    X# und Rotwein im Namespace...: hat,schon was..
    Rainer.
    Altes IT Fossil, von Großrechner bis Embedded..
    und das seit ca 1984 ( Video Genie, Dolphin , IBM ...DEC und was auch noch kommen mag.. )

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 25 Feb 2020 17:41 #13414

  • Horst's Avatar

  • Horst

  • Topic Author


  • Posts: 158
  • Da bin ich wieder ;-)
    Ich lese eine Html Datei in einen String ein, mit CodePage1252 also Windows Ansi. Und nun muss ich sie in den Buffer schreiben. Da habe ich: bBuffer := System.Text.Encoding.UTF8:GetBytes(cString) verwendet
    Jetzt stimmt mir die Codierung nicht. Es müsste am UTF8 liegen, der MS Help bringt mir nichts, ich sehe nicht wie ich das auf Windows-1252 setzen kann.
    Eigentlich müsste ich nur den cString in bytes umschreiben (bBuffer). Gibts da sowas wie String2Byte() ? oder wie macht man das mit dem Encoding?

    Gruss
    Horst

    Please Log in or Create an account to join the conversation.

    Gemischtes / mishmash 25 Feb 2020 18:17 #13415

  • Chris's Avatar

  • Chris


  • Posts: 2182
  • Hi Horst,

    Not sure if this is what you mean, but try this:

    bBuffer := System.Text.Encoding.GetEncoding(1252):GetBytes(cString)
    XSharp Development Team
    chris(at)xsharp.eu

    Please Log in or Create an account to join the conversation.

    Moderators: wriedmann