StreamWriter

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    StreamWriter

    Hallo Freunde!

    Ich steh gerade ein wenig auf der Leitung!
    Wie bekomm eich es hin das---->

    Quellcode

    1. Private Sub DatenAbspeichern()
    2. Dim file As System.IO.StreamWriter
    3. file = My.Computer.FileSystem.OpenTextFileWriter(TextBox2.Text, True)
    4. (DIESE ZEILE NUR EIN MAL-QUASI ALS ÜBERSCHRIFT-IN DAS FILE GESCHRIEBEN WIRD!)--->
    5. file.WriteLine("MESSWERTZÄHLER" + "," + "DATUM & UHRZEIT" + "," + "DRUCK(bar)" + "," + "TEMPERATUR(°C)" + "," + "VOLUMENFLUSS(L/min.)" + "," + "STANDARTLITER" + "," + "AUSGEWÄHLTE GASART")
    6. <---
    7. file.WriteLine(MESSWERTZÄHLER.ToString + "," + Now.ToString + "," + lblDRUCK.Text + "," + lblTEMP.Text + "," + lblVOLUMENFLUSS.Text + "," + lblSTANDARTLITER.Text + "," + lblGASART.Text)
    8. file.Close()
    9. End Sub


    Ich komm gerade echt nicht drauf X( ?(
    Vielen dank für Tipps :thumbup:
    Andreas
    "Why the heck is this peace of shit not work'in?" ?( ......."Oh...i see! ..cause I'm not work'in!!" 8|
    @Beppi4u,

    aus deinem Post geht nicht ganz hervor wo genau dein Problem liegt.

    Aber nagut.
    Hier mal ein Beispiel

    C#-Quellcode

    1. using (StreamWriter sw = new StreamWriter(filename, false, System.Text.Encoding.Default))
    2. {
    3. sw.WriteLine(ret);
    4. }


    Gruss

    mikeb69
    Hi,
    Warum benutzt Du den IO Namespace und dann wieder den My Namespace... bleib doch bei IO....

    VB.NET-Quellcode

    1. Private Sub ForumTest(path As String)
    2. Using sw = New StreamWriter(path)
    3. sw.Write("Überschrift" & NewLine)
    4. sw.Write("Nächste Zeile")
    5. End Using
    6. End Sub

    "Hier könnte Ihre Werbung stehen..."
    Na ja der Code wird von einem Timer aufgerufen und soll
    Einmal dies schreiben (Quasi als Spaltenüberschrift für die weitere Verwendung in Excel!)
    file.WriteLine("MESSWERTZÄHLER" + "," + "DATUM & UHRZEIT" + "," + "DRUCK(bar)" + "," + "TEMPERATUR(°C)" + "," + "VOLUMENFLUSS(L/min.)" + "," + "STANDARTLITER" + "," + "AUSGEWÄHLTE GASART")

    und dann bei jedem folgendem Aufruf :

    file.WriteLine(MESSWERTZÄHLER.ToString + "," + Now.ToString + "," + lblDRUCK.Text + "," + lblTEMP.Text + "," + lblVOLUMENFLUSS.Text + "," + lblSTANDARTLITER.Text + "," + lblGASART.Text)

    .....so wie ich das eben jetzt habe schreibt er immer in jede Zeile:
    MESSWERTZÄHLER,DATUM & UHRZEIT,DRUCK(bar),TEMPERATUR(°C),VOLUMENFLUSS(L/min),AUSGEWÄHLTE GASART, (und danach die Werte aus den Entsprechenden Labels)
    Eigentlich nur ein "nice to have!" damit die .csv DATEI auch von anderen ohne Probleme gelesen werden kann!
    Danke
    Andreas
    "Why the heck is this peace of shit not work'in?" ?( ......."Oh...i see! ..cause I'm not work'in!!" 8|
    @Fakiz Jou.
    @Beppi4u Dann kannst Du auch auf den StreamWriter verzichten und mit File.AppendAllText(...) die Info hinten an die Datei dranhängen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    .....nun steh ich leider immer noch auf der Leitung!! ;(
    Wenn ich hier die Datei aufmache und den Kopf schreibe....

    Quellcode

    1. Public Sub btn_AUFZEICHNUNG_START_Click(sender As System.Object, e As System.EventArgs) Handles btn_AUFZEICHNUNG_START.Click
    2. btn_AUFZEICHNUNG_START.BackColor = Color.Green
    3. btn_AUFZEICHNUNG_START.Text = "AUFZEICHNUNG LÄUFT!"
    4. Dim file As System.IO.StreamWriter
    5. file = My.Computer.FileSystem.OpenTextFileWriter(TextBox2.Text, True)
    6. file.WriteLine("MESSWERTZÄHLER" + "," + "DATUM & UHRZEIT" + "," + "DRUCK(bar)" + "," + "TEMPERATUR(°C)" + "," + "VOLUMENFLUSS(L/min.)" + "," + "STANDARTLITER" + "," + "AUSGEWÄHLTE GASART")
    7. file.Close()
    8. Me.SPEICHERTIMER.Start()
    9. TabControl1.SelectTab(0)
    10. TextBox3.Text = CStr(DateTime.Now)
    11. TextBox4.Text = " "
    12. Me.DAUERTIMER.Start()
    13. Me.Zeitmesser.Start()
    14. End Sub


    Dann möchte ich hier die Messdaten schreiben.....-->Public Sub DatenAbspeichern()<-- wird durch den SPEICHERTIMER ausgelöst!

    Quellcode

    1. Public Sub Daten_Abspeichern()
    2. Dim file As System.IO.StreamWriter
    3. file = My.Computer.FileSystem.OpenTextFileWriter(TextBox2.Text, True)
    4. file.WriteLine(MESSWERTZÄHLER.ToString + "," + Now.ToString + "," + lblDRUCK.Text + "," + lblTEMP.Text + "," + lblVOLUMENFLUSS.Text + "," + lblSTANDARTLITER.Text + "," + lblGASART.Text)
    5. End Sub


    Wenn dann ein Stop Button gedückt wird soll die Aufnahme beendet werden und die Datei geschlossen werden!

    Quellcode

    1. Private Sub btn_AUFZEICHNUNG_BEENDEN_Click(sender As System.Object, e As System.EventArgs) Handles btn_AUFZEICHNUNG_BEENDEN.Click
    2. btn_AUFZEICHNUNG_START.BackColor = Color.Red
    3. btn_AUFZEICHNUNG_START.Text = "AUFZEICHNUNG STARTEN"
    4. Me.SPEICHERTIMER.Stop()
    5. TextBox4.Text = CStr(DateTime.Now)
    6. Me.DAUERTIMER.Stop()
    7. Me.Zeitmesser.Stop()
    8. End Sub


    Aaaaaaber in AUFZEICHNUNG_BEENDEN kann ich doch nich reinschreiben das in Daten_Abspeichern der die Datei des StreamWriter geschlossen werden soll!?
    Vielleicht kann mir jemand genau zeigen wie man so eine Funktion richtig schreibt !
    Vielen Dank für Tipps
    Andreas
    "Why the heck is this peace of shit not work'in?" ?( ......."Oh...i see! ..cause I'm not work'in!!" 8|
    @Beppi4u,

    der Vorschlag war, die Datei mit Kopf zu schreiben - nur beim ersten Mal.
    Danach immer mit Append die Daten hinten anzufügen.

    Und bitte .... kappsel das in ein Using, wie in meinem Beispiel zu sehen.

    Gruss

    mikeb69
    Hier mal ein kleines Beispiel, wie ich das angehen würde.

    Beispiel

    C#-Quellcode

    1. private void Form1_Load(object sender, EventArgs e)
    2. {
    3. FileInfo fiFile = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "MeineMesswerte.txt"));
    4. string strMesswerte = "Wert1=1, Wert2=2, ect...";
    5. // Messwerte eintragen
    6. AddNewMeasuredValues(fiFile, strMesswerte, true);
    7. strMesswerte = "Wert1=2, Wert2=3, ect...";
    8. // Messwerte eintragen
    9. AddNewMeasuredValues(fiFile, strMesswerte, true);
    10. }
    11. /// <summary>
    12. /// Erstellt eine Datei und schreibt den Dateikopf in diese Datei, wenn die Datei noch nicht existiert
    13. /// </summary>
    14. /// <param name="fiFile">FileInfo -Objekt, repäsentiert die zu erstellende Datei</param>
    15. private void CreateFileHeader(FileInfo fiFile)
    16. {
    17. // Prüfung ob die Datei bereits existiert, wenn diese Existiert wird die Methode verlassen. Da angenommen werden kann das der Dateikopf bereits existiert.
    18. if (File.Exists(fiFile.FullName))
    19. return;
    20. // Schreibt den Dateikopf in die Datei
    21. File.WriteAllText(fiFile.FullName, "Ich bin ein Dateikopf...\n");
    22. }
    23. /// <summary>
    24. /// Schreibt neue Messwerte in die angegebene Datei
    25. /// </summary>
    26. /// <param name="fiFile">FileInfo -Objekt, repräsentiert die Datei in der die Messwerte eingetragen werden sollen</param>
    27. /// <param name="measuredValues">Die neuen Messwerte als String</param>
    28. /// <param name="crlf">Wenn true wird ein Zeilenumbruch an den Messwert angefügt</param>
    29. private void AddNewMeasuredValues(FileInfo fiFile, string measuredValues, bool crlf)
    30. {
    31. // Wenn die Datei noch nicht existiert wird sie erstellt
    32. if (!File.Exists(fiFile.FullName))
    33. CreateFileHeader(fiFile);
    34. // Fügt falls gewünscht einen Zeilenumbruch an die Messwerte
    35. if (crlf)
    36. measuredValues += Environment.NewLine;
    37. File.AppendAllText(fiFile.FullName, measuredValues);
    38. }


    c# Vb.Net Konverter

    VB.NET-Quellcode

    1. Dim file As System.IO.StreamWriter '<--- Global
    2. Public Sub btn_AUFZEICHNUNG_START_Click(sender As System.Object, e As System.EventArgs) Handles btn_AUFZEICHNUNG_START.Click
    3. btn_AUFZEICHNUNG_START.BackColor = Color.Green
    4. btn_AUFZEICHNUNG_START.Text = "AUFZEICHNUNG LÄUFT!"
    5. file = My.Computer.FileSystem.OpenTextFileWriter(TextBox2.Text, True)
    6. file.WriteLine("MESSWERTZÄHLER" + "," + "DATUM & UHRZEIT" + "," + "DRUCK(bar)" + "," + "TEMPERATUR(°C)" + "," + "VOLUMENFLUSS(L/min.)" + "," + "STANDARTLITER" + "," + "AUSGEWÄHLTE GASART")
    7. Me.SPEICHERTIMER.Start()
    8. TabControl1.SelectTab(0)
    9. TextBox3.Text = CStr(DateTime.Now)
    10. TextBox4.Text = " "
    11. Me.DAUERTIMER.Start()
    12. Me.Zeitmesser.Start()
    13. End Sub
    14. Public Sub Daten_Abspeichern()
    15. file.WriteLine(MESSWERTZÄHLER.ToString + "," + Now.ToString + "," + lblDRUCK.Text + "," + lblTEMP.Text + "," + lblVOLUMENFLUSS.Text + "," + lblSTANDARTLITER.Text + "," + lblGASART.Text)
    16. End Sub
    17. Private Sub btn_AUFZEICHNUNG_BEENDEN_Click(sender As System.Object, e As System.EventArgs) Handles btn_AUFZEICHNUNG_BEENDEN.Click
    18. file.Close()
    19. btn_AUFZEICHNUNG_START.BackColor = Color.Red
    20. btn_AUFZEICHNUNG_START.Text = "AUFZEICHNUNG STARTEN"
    21. Me.SPEICHERTIMER.Stop()
    22. TextBox4.Text = CStr(DateTime.Now)
    23. Me.DAUERTIMER.Stop()
    24. Me.Zeitmesser.Stop()
    25. End Sub
    Danke "EIERLEIN" für den Hinweis der zum Erfolg geführt hat!
    Jetzt sieht das File auch so aus wie ich es will und ich kann direkt weitergeben!!

    You all have a nice weekend! :P


    "Why the heck is this peace of shit not work'in?" ?( ......."Oh...i see! ..cause I'm not work'in!!" 8|

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beppi4u“ ()

    Eierlein schrieb:

    VB.NET-Quellcode

    1. Dim file As System.IO.StreamWriter '<--- Global
    ist suboptimal.
    @Beppi4u Du hast nun schon mehrere Hinweise bekommen, dass Du mit Append Daten hinten dran scheiben kannst.
    Bist Du beratungsresistent :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Eierlein ist suboptimal, weil der StreamWriter von beliebig irgendwo zugemacht werden kann.
    Deshalb soll er mit Using benutzt werden.
    Wenn das Programm eine Woche lang läuft um zu messen ist es einfach unsinnig, die Datei so lange offen halten zu wollen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dass der SW von beliebig zugemacht wern kann, sehe ich eiglich nicht so - er ist ja privat deklariert (der nebenstehende Kommentar lügt, und sollte unbedingt entfernt werden).

    Ansonsten kommts wohl auch auf den Anwendungsfall an.
    Wenn die Messdauer überschaubar ist - sekunden oder minuten - und es laufen die Datensätze sehr schnell ein, dann ist resourcensparender, den StreamWriter einmal zu öffnen, offen zu lassen, und erst am Schluss zu schließen und zu disposen.

    Das wird natürlich immer unsicherer, je länger der Messvorgang läuft. Dateien können beschädigt werden, wenn das Prog schliesst, während der SW arbeitet. Oder die Datei wird von extern versucht, umzubenennen, oder wird versucht, sie zu editieren - sowas macht Probs, wenn da noch ein offener SW seinen Finger drauf hat.

    Und wenn das Prog tagelang läuft, und wenn die Datensätze auch nicht häufiger als 1/s eintrudeln, dann kann man auch jedesmal einen neuen StreamWriter nehmen, bzw. auch gleich mit System.IO.File.Append(...) arbeiten, was intern auch jedesmal einen neuen StreamWriter nimmt (oder FileHandle, oder dgl.).
    Erst einmal vielen dank die vielen Vorschläge und Hinweise!

    Da mir sowieso die Grundlagen in Sachen programmierung fehlen habe ich gar nicht den Anspruch das das was ich da so an Code zusammenkleistere von mir SAUBER programmiert worden ist!

    Wenn das Ding dann in der Dauererprobung tut kann's so falsch gar net sein!

    Und JA!-- das gibt mit Sicherheit noch Probleme, dessen bin ich mir Bewusst!

    Da muss ich noch einiges lernen....und das tue ich learning by doing!

    Mann sehe es mir bitte nach das ich nicht sofort jeden Tipp umsetze -- Wenn das als Beratungsressistent erscheint dann TSCHULDIGUNG!

    Gruessle

    Andreas
    "Why the heck is this peace of shit not work'in?" ?( ......."Oh...i see! ..cause I'm not work'in!!" 8|

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beppi4u“ ()

    @Beppi4u Kannst Du bitte mal Deinen Post ent-HTML-formatieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!