1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Random aus Textdatei

Discussion in 'Programmieren' started by Wolflkoder, Aug 28, 2007.

Thread Status:
Not open for further replies.
  1. Wolflkoder

    Wolflkoder Byte

    Hallo!

    Als" Visual Basic 2005 express" Greenhorn habe ich ein Problem damit, ein kleines Programm zu schreiben, das aus einer Textdatei z.B. C:\test.txt mittels "Random" beliebige Zeilen in eine Textbox schreibt.

    Die Test Datei hat ca 200 Zeilen und ich möchte 10 bleibige vom Computer auserwählte Zeilen in eine Textbox geschreiben bekommen.


    Danke für eure Hilfe:bitte:
     
  2. Eldor

    Eldor Kbyte

    hey

    sind die zahlen der reihe nach also:

    1
    2
    3
    usw?

    oder sind da nur verschiedene Zahlen zb:

    44
    88
    12
    33
    usw?

    wenn wie in Beispiel 1 dann machste du das am besten ohne Textdatei:

    Code:
    zufallszahl = Int(Rnd * 200) + 1
    wenn du das eher wie im 2. Beispiel hast dann wird das etwas schwieriger...:


    Code:
    ' Bestimmte Zeile aus einer Textdatei lesen
    Public Function ReadLine(ByVal sFile As String, _
      Optional ByVal nLine As Long = 1) As String
    
      Dim sLines() As String
      Dim oFSO As Object
      Dim oFile As Object
      
      ' Fehlerbehandlung aktivieren
      On Error GoTo ErrHandler
      
      ' Verweis auf das FileSystemObject erstellen
      Set oFSO = CreateObject("Scripting.FileSystemObject")
      
      ' Existiert die Datei überhaupt?
      If oFSO.FileExists(sFile) Then
        ' Datei öffnen
        Set oFile = oFSO.OpenTextFile(sFile)
        
        ' Alles lesen und in Array zerlegen
        sLines = Split(oFile.ReadAll, vbCrLf)
        
        ' Datei schließen
        oFile.Close
        
        Select Case Sgn(nLine)
           ' (nLine > 0)
          Case 1
            ' n-te Zeile von vorne beginnend
            ReadLine = sLines(nLine - 1)
          
          ' (nLine < 0)
          Case -1
            ' n-te Zeile von hinten beginnend
            ReadLine = sLines(UBound(sLines) + nLine + 1)
        End Select
      End If
      
    ErrHandler:
      ' Objekte zerstören
      Set oFile = Nothing
      Set oFSO = Nothing
    End Function
    und so kannst du das dann verwenden:
    Code:
    ' zufällige Zeile einer Datei lesen
    Randomize  'Zufallsgenerator wird aktiviert
    txtLine.Text = ReadLine("C:\test.txt", Int(Rnd * 200) + 1)
    

    ich hoffe ich konnte dir helfen ;)
    sonst einfach nochmal melden
     
  3. Wolflkoder

    Wolflkoder Byte

    Hallo,
    erst mal danke für die Hilfe Eldor

    bei meinem Problem handelt es sich nicht um Zahlen.

    in einer Textdatei (txt) sin untereinander verschiedene E-Mail Adressen (ca 200) aufgelistet.
    Also jede Adresse hat eine eigene Zeile.

    Und mein Ziel ist es, das per Knopfdruck aus diesen 200 Adressen per Zufallsgenerator 10 Adressen angezeigt werden. am besten in einer TextBox.

    MFG

    Wolflkoder
     
  4. Eldor

    Eldor Kbyte

    hab den code leicht verändert sollte jetzt funktionieren;)
    du musst dann nurnoch eine textbox erstellen, die text1 heißt und bei den Eigenschaften dieser textbox multiline = true stellen. sonst brauchst du nurnoch einen commandbutton der command1 heißen sollte
    Code:
    ' Bestimmte Zeile aus einer Textdatei lesen
    Public Function ReadLine(ByVal sFile As String, _
      Optional ByVal nLine As Long = 1) As String
    
      Dim sLines() As String
      Dim oFSO As Object
      Dim oFile As Object
      
      ' Fehlerbehandlung aktivieren
      On Error GoTo ErrHandler
      
      ' Verweis auf das FileSystemObject erstellen
      Set oFSO = CreateObject("Scripting.FileSystemObject")
      
      ' Existiert die Datei überhaupt?
      If oFSO.FileExists(sFile) Then
        ' Datei öffnen
        Set oFile = oFSO.OpenTextFile(sFile)
        
        ' Alles lesen und in Array zerlegen
        sLines = Split(oFile.ReadAll, vbCrLf)
        
        ' Datei schließen
        oFile.Close
        
        Select Case Sgn(nLine)
           ' (nLine > 0)
          Case 1
            ' n-te Zeile von vorne beginnend
            ReadLine = sLines(nLine - 1)
          
          ' (nLine < 0)
          Case -1
            ' n-te Zeile von hinten beginnend
            ReadLine = sLines(UBound(sLines) + nLine + 1)
        End Select
      End If
      
    ErrHandler:
      ' Objekte zerstören
      Set oFile = Nothing
      Set oFSO = Nothing
    End Function
    
    Private Sub Command1_Click()
    ' zufällige Zeile einer Datei lesen
    Randomize  'Zufallsgenerator wird aktiviert
    For i = 1 To 10
    Text1.Text = Text1.Text & ReadLine("C:\test.txt", Int(Rnd * 200) + 1) & vbCrLf
    Next
    End Sub
     
  5. Wolflkoder

    Wolflkoder Byte

    folgende Fehler hab ich jetzt noch drin.


    Eine Answeisung kann nicht innerhalb eines Methodentextes verwendet werden.

    "Sgn" ist nicht deklariert.

    Der Name "i" wurde nicht deklariert.


    wie schon gesagt Greenhorn.

    Danke
     
  6. Eldor

    Eldor Kbyte

    hmm...
    versuch einfach mal bei der Function wo schon die anderen deklariert worden: Dim sgn

    das sieht dann so aus:
    Code:
    Dim sLines() As String
      Dim oFSO As Object
      Dim oFile As Object
    dim sgn
    ...
    
    und das dim i kommt hier rein:

    Code:
    Private Sub Command1_Click()
    ' zufällige Zeile einer Datei lesen
    Randomize  'Zufallsgenerator wird aktiviert
    Dim i
    For i = 1 To 10
    ...
    
     
  7. Wolflkoder

    Wolflkoder Byte

    Eine Anweisung kann nicht innerhalb eines Methodentexts verwendet werden. Das Methodenende wird angenommen.

    Die sgn-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.

    Die ReadLine-Funktion gibt nicht für alle Codepfade einen Wert zurück. Wenn das Ergebnis verwendet wird, kann zur Laufzeit eine Nullverweisausnahme auftreten.

    .......................................

    Das mit "i" Deklarieren hat funktioniert.
     
  8. Eldor

    Eldor Kbyte

    sry aber bei dem anderen kann ich dir leider auch nicht weiterhelfen :(
    probier einfach mal das dim sgn iwo anders hinzusetzten :D
    einfach mal ausprobieren so komm ich auch oft zur lösung ;)
    komisch bei mir funktioniert das einwandfrei...
     
  9. Wolflkoder

    Wolflkoder Byte

    Sod, jetzt hab ich nur noch diesen einen Fehler drin, falls dir noch irgend was dazu einfallen sollte......

    "Sgn" ist nicht deklariert. Diese Funktion wurde in die System.Math-Klasse verschoben und heißt jetzt "Sign".


    Trotzdem danke für deine Mühe.


    MFG

    Wolflkoder
     
Thread Status:
Not open for further replies.

Share This Page