none
Text in Textdatei einbringen RRS feed

  • Frage

  • Hallo,

    Ich habe eine frage, geht das wenn ich jetzt eine textbox habe und ich darin was schreibe das wenn ich das in ein textdokument anfüge ?

    zb:

    Im Textfile steht :
    Bla
    Bla
    Blub

    und das dann unter dem blub als line 4 das was in der Textbox steht darunter dran gesetzt wird ?

    Dann noch eine kleine frage :
    Kann man eine zahlen reihe fortsetzen mit einem code?
    Ich habe das hier wo er aus der textdatei ausließt :

    If
     Auftrag.Text = "1"
     Then
    
    Produkt.Text = lines(1)
    Stück.Text = lines(2)
    Bild.ImageLocation = lines(3)
    End If

    dann möchte ich das wenn ich bei Auftrag.Text 2 rein schreibe in die Textbox dass er automatisch die lines 4,5 & 6 ausliest und dann eben so weiter sonst müsste ich da 100 mal das bearbeiten.

    Vielen dank schon mal

    MfG

    Samstag, 15. Mai 2010 20:18

Antworten

  • Hi,

    Ich habe eine frage, geht das wenn ich jetzt eine textbox habe und ich darin was schreibe das wenn ich das in ein textdokument anfüge ?

    zb:

    Im Textfile steht :
    Bla
    Bla
    Blub

    und das dann unter dem blub als line 4 das was in der Textbox steht darunter dran gesetzt wird ?

    Ich weiß zwar nicht, ob ich deine Frage richtig verstanden habe aber falls ja, wäre das hier passend.

     

    My.Computer.FileSystem.WriteAllText( "X:\Ordner\Datei.txt", <TextBox>.Text, True)
    
    Damit wird der Inhalt der TextBox an die Datei angehangen.

     

    dann möchte ich das wenn ich bei Auftrag.Text 2 rein schreibe in die Textbox dass er automatisch die lines 4,5 & 6 ausliest und dann eben so weiter sonst müsste ich da 100 mal das bearbeiten.

    Öhm. Deine Fragestellung ist ziemlich "komisch".

    Wenn Du immer drei Zeilen aus einer Datei lesen willst, wobei die zu lesenden Zeilen abhängig von einer eingegeben Zahl sein sollen, liest dich mal hier ein:

    http://msdn.microsoft.com/de-de/library/system.io.streamreader.readline.aspx
    http://msdn.microsoft.com/de-de/library/db5x7c0d.aspx
    http://msdn.microsoft.com/de-de/library/s2tte0y1.aspx

     

    Dim LineToStart As Int64
    Dim LineCount  As Int64 = 3
    
      LineToStart = ( <Eingabe> * LineCount ) + 1
    
      For Counter As Int64 = 1 To LineToStart - 1
    <StreamReader>.ReadLine() Next Produkt.Text = <StreamReader>.ReadLine() Stück.Text = <StreamReader>.ReadLine() Bild.ImageLocation = <StreamReader>.ReadLine()

    So in etwas könnte man es machen. Da fehlen aber natürlich noch einige Sachen wie Fehlerbehandlung, wenns gar nicht so viele Zeilen gibt, ...

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 15. Mai 2010 20:36
    Moderator
  • Hallo,

    leider hattee ich es unglüclicklich formuliert, als ich "auftrag" zweimal verwendet habe.
    Richtiger wäre gewesen:  Entweder Me.auftrag.Text, wenn man von einem Steuerelement
    ausgeht, oder ein anderer Variablenname für den Integer (z. B. auftragIndex).

    Ansonsten ist das durchaus richtig. Integer.TryParse liest einen Text ein und liefert
    nur dann Wahr wenn es sich um eine Zahl handelt.
    (1 - 1)  * 3 =>  0,  (2 - 1) * 3 => 3, (3 - 1) * 3 = 6 usw.

    Der Code so gestaltet, dass er unabhängig von Steuerelementen und Datei funktioniert:

      Public Sub AuftragSchleife()
        Dim lines As String() = {"Bla", "Bla", "Blubb", "2. Bla", "2. BlaBla", "2. Blubb", "3. Bla", "3. Bla", "3. Blubb"}
    
        ' Simulierte Eingabe
        Dim AuftragTexte As String() = {"1", "2", "3", "abc", "0", "-1"}
    
        For Each auftragText In AuftragTexte
          Dim auftrag As Integer
          If Integer.TryParse(auftragText, auftrag) Then
            ' Auftrag ab 1. mit jeweils 3 Zeilen, Array beginnt bei 0
            auftrag = (auftrag - 1) * 3
            Console.WriteLine("Auftrag Index: {0}", auftrag)
    
            If (auftrag >= 0 AndAlso (auftrag + 2) < lines.Length) Then
              Console.WriteLine("Produkt: {0}", lines(auftrag))
              Console.WriteLine("Stück: {0}", lines(auftrag + 1))
              Console.WriteLine("Bild: {0}", lines(auftrag + 2))
            Else
              Console.WriteLine("{0} ist eine ungültige Auftragsnummer", auftragText)
            End If
          Else
            Console.WriteLine("{0} ist Keine Zahl", auftragText)
          End If
        Next
      End Sub
    
    Deine versuchte Umwandlung mit ToString() läßt micht vermuten,
    Du arbeitest mit Option Strict Off. Das sollste Du tunlichst in "On" -
    am besten auf Projektebene - ändern.
    Denn ohne richtige Typprüfung forderst Du Fehler heraus.

    Gruß Elmar

    Sonntag, 16. Mai 2010 07:26

Alle Antworten

  • Hi,

    Ich habe eine frage, geht das wenn ich jetzt eine textbox habe und ich darin was schreibe das wenn ich das in ein textdokument anfüge ?

    zb:

    Im Textfile steht :
    Bla
    Bla
    Blub

    und das dann unter dem blub als line 4 das was in der Textbox steht darunter dran gesetzt wird ?

    Ich weiß zwar nicht, ob ich deine Frage richtig verstanden habe aber falls ja, wäre das hier passend.

     

    My.Computer.FileSystem.WriteAllText( "X:\Ordner\Datei.txt", <TextBox>.Text, True)
    
    Damit wird der Inhalt der TextBox an die Datei angehangen.

     

    dann möchte ich das wenn ich bei Auftrag.Text 2 rein schreibe in die Textbox dass er automatisch die lines 4,5 & 6 ausliest und dann eben so weiter sonst müsste ich da 100 mal das bearbeiten.

    Öhm. Deine Fragestellung ist ziemlich "komisch".

    Wenn Du immer drei Zeilen aus einer Datei lesen willst, wobei die zu lesenden Zeilen abhängig von einer eingegeben Zahl sein sollen, liest dich mal hier ein:

    http://msdn.microsoft.com/de-de/library/system.io.streamreader.readline.aspx
    http://msdn.microsoft.com/de-de/library/db5x7c0d.aspx
    http://msdn.microsoft.com/de-de/library/s2tte0y1.aspx

     

    Dim LineToStart As Int64
    Dim LineCount  As Int64 = 3
    
      LineToStart = ( <Eingabe> * LineCount ) + 1
    
      For Counter As Int64 = 1 To LineToStart - 1
    <StreamReader>.ReadLine() Next Produkt.Text = <StreamReader>.ReadLine() Stück.Text = <StreamReader>.ReadLine() Bild.ImageLocation = <StreamReader>.ReadLine()

    So in etwas könnte man es machen. Da fehlen aber natürlich noch einige Sachen wie Fehlerbehandlung, wenns gar nicht so viele Zeilen gibt, ...

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 15. Mai 2010 20:36
    Moderator
  • Hallo,

    zu 1.) Solange Du an fügen willst, kannst Du die File. AppendText-Methode
    oder eine der anderen Append-Methoden verwenden.
    Sobald Du allerdings ein fügen willst (z. B. zwischen "Bla" und "Blub")
    mußt Du die gesamte Datei neu schreiben.

    Solange die Datei von der Größe überschaubar bleibt kannst Du via File. ReadAllLines
    alle Zeilen in ein Zeichenketten-Array lesen und am Schluß mittels File.WriteAllLines
    wieder in die Datei schreiben (ggf. vorher zur Sicherheit via File.Move umbennen).
    Beachte dass unter .NET Textdateien im Standard in UTF Kodierung geschrieben werden.

    Über das Array kannst Du via Variable und Offset zugreifen.
    Wobei Arrays bei Null beginnen, und wenn Deine Auftragsnummer bei eins beginnt,
    so mußt etwas Mathematik betreiben. Was in etwa so aussehen könnte:

     

        ' Hier: Windows Kodierung, wenn nicht UTF-8
        Dim lines As String() = File.ReadAllLines("Datei.Txt", Encoding.Default)
    
        Dim auftrag As Integer
        If Integer.TryParse(Auftrag.Text, auftrag) Then
          ' Auftrag ab 1. mit jeweils 3 Zeilen, Array beginnt bei 0
          auftrag = (auftrag - 1) * 3
    
          If (auftrag >= 0 AndAlso (auftrag + 2) < lines.Length) Then
            Produkt.Text = lines(auftrag)
            Stück.Text = lines(auftrag + 1)
            Bild.ImageLocation = lines(auftrag + 2)
          Else
            MessageBox.Show("Ungültige Auftragsnummer")
          End If
        Else
          MessageBox.Show("Keine Zahl")
        End If
    (wobei vollkommen ungetestet und aus Deiner Beschreibung zusammengeraten)

    Gruß Elmar

    Samstag, 15. Mai 2010 20:52
  • Danke erstmal,
    Wenn ich bei deinem code mit auftragsnummer 1 das mache sagt er eben ungültige auftragsnummer ... wenn ich bei der zeile :
    auftrag = (auftrag - 1) * 3
    mit
    auftrag = (auftrag - 0) * 3
    ersetze bekomme ich die ersten 3 zeilen ausgelesen, als logische folge kann er aber bei der auftragsnummer 2 nichts mehr finden da 0*3 gleich 0 ist.
    hier
    If Integer.TryParse(Auftrag.Text, auftrag) Then
    
    
    muss man das ".text" durch ".ToString" ersetzen da wir ja auftrag als Integer festgelegt haben.
    jedoch stehe ich gerade an

    Samstag, 15. Mai 2010 21:22
  • Hallo,

    leider hattee ich es unglüclicklich formuliert, als ich "auftrag" zweimal verwendet habe.
    Richtiger wäre gewesen:  Entweder Me.auftrag.Text, wenn man von einem Steuerelement
    ausgeht, oder ein anderer Variablenname für den Integer (z. B. auftragIndex).

    Ansonsten ist das durchaus richtig. Integer.TryParse liest einen Text ein und liefert
    nur dann Wahr wenn es sich um eine Zahl handelt.
    (1 - 1)  * 3 =>  0,  (2 - 1) * 3 => 3, (3 - 1) * 3 = 6 usw.

    Der Code so gestaltet, dass er unabhängig von Steuerelementen und Datei funktioniert:

      Public Sub AuftragSchleife()
        Dim lines As String() = {"Bla", "Bla", "Blubb", "2. Bla", "2. BlaBla", "2. Blubb", "3. Bla", "3. Bla", "3. Blubb"}
    
        ' Simulierte Eingabe
        Dim AuftragTexte As String() = {"1", "2", "3", "abc", "0", "-1"}
    
        For Each auftragText In AuftragTexte
          Dim auftrag As Integer
          If Integer.TryParse(auftragText, auftrag) Then
            ' Auftrag ab 1. mit jeweils 3 Zeilen, Array beginnt bei 0
            auftrag = (auftrag - 1) * 3
            Console.WriteLine("Auftrag Index: {0}", auftrag)
    
            If (auftrag >= 0 AndAlso (auftrag + 2) < lines.Length) Then
              Console.WriteLine("Produkt: {0}", lines(auftrag))
              Console.WriteLine("Stück: {0}", lines(auftrag + 1))
              Console.WriteLine("Bild: {0}", lines(auftrag + 2))
            Else
              Console.WriteLine("{0} ist eine ungültige Auftragsnummer", auftragText)
            End If
          Else
            Console.WriteLine("{0} ist Keine Zahl", auftragText)
          End If
        Next
      End Sub
    
    Deine versuchte Umwandlung mit ToString() läßt micht vermuten,
    Du arbeitest mit Option Strict Off. Das sollste Du tunlichst in "On" -
    am besten auf Projektebene - ändern.
    Denn ohne richtige Typprüfung forderst Du Fehler heraus.

    Gruß Elmar

    Sonntag, 16. Mai 2010 07:26
  • Nun ja jetzt ist es so dass es keine consolen anwendung ist kann er nix tun, wie arbeite ich das um auf eine WindowsForm ?
    Sonntag, 16. Mai 2010 07:36
  • Hallo,

    Du solltest doch ein oder zwei Grundlagen pauken! z. B.:
    http://www.microsoft.com/germany/msdn/aktuell/news/MicrosoftVisualBasic2008DasEntwicklerbuch.mspx

    Im obigen Beispiel habe ich die Zuweisungen zur Demonstration durch eine
    Konsolenausgabe ersetzt, und die siehst Du in Windows Forms Anwendungen
    im Ausgabe Fenster.
    Das wiederum in eine Zuweisung an Deine Textboxen (oder was auch immer sonst)
    umzuändern, dazu solltest Du selbständig in der Lage sein (zumal es im gestrigen
    Beispiel ansatzweise so steht).

    Gruß Elmar

    Sonntag, 16. Mai 2010 10:19
  • Ja habe ich bereits :D danke
    Sonntag, 16. Mai 2010 10:25
  • Ja habe ich bereits :D danke

    Ich weiß zwar nicht, was Du mit "habe ich bereits" meinst aber ich würde mal sagen: Nö, hast Du nicht. :)

    Zumindest gehst du nicht konkrekt auf die Beispiele ein. Das Grundprinzip aus meiner und Elmars erster Antwort ist eigentlich das, was Du brauchst. Die Einzelheiten hängen natürlich stark von deinem restlichen Code ab. Und ohne Grundlagenkenntnisse kommst Du da leider nicht wirklich weit.

    Von daher arbeite eines der Beispiele in deinen Code ein, formatier den mal sauber, achte auf Datentypen, ... und wenn es dann noch Probleme gibt, poste bitte den relevanten Codeausschnitt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 16. Mai 2010 16:04
    Moderator
  • Hallo Dullydev,

    deine Zeilen lassen mich vermuten, dass so was wie eine Datenbank vor hast?
    Wenn es dir also nicht ums Grundprinzip geht wie du selbst Text anfügst etc., dazu hast du ja hier Antworten bekommen, dann liegt dein Glück doch wohl eher in der Datenbank.


    Liebe Grüße Stefan
    Montag, 17. Mai 2010 22:11
  • Hallo Dullydev,

    deine Zeilen lassen mich vermuten, dass so was wie eine Datenbank vor hast?
    Wenn es dir also nicht ums Grundprinzip geht wie du selbst Text anfügst etc., dazu hast du ja hier Antworten bekommen, dann liegt dein Glück doch wohl eher in der Datenbank.


    Liebe Grüße Stefan
    Ja du liegst richtig soll eine datenbank werden jedoch muss ich mich erst ein arbeiten und ein freund von mir braucht das schnell das er zumindest anfangen kann
    Donnerstag, 27. Mai 2010 08:56