TextDatei in For each erstellen und füllen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    TextDatei in For each erstellen und füllen

    Guten Morgen,

    ich sitze mal wieder vor einem Problem :D

    und zwar möchte ich in einer Schleife 100 Textdateien erstellen und diese dann in einer weiteren schleife direkt mit Werten füttern.

    Allerding bekomme ich so momentan den Fehler, das der Prozess genutzt wird.

    Vielen Dank schon einmal für eure Hilfe :).



    VB.NET-Quellcode

    1. For Each a As Match In laender
    2. Dim liganame = a.Groups("Liga1").Value
    3. dateiOddswayLiga = New FileInfo("d:/testordner/" & liganame & ".txt")
    4. MessageBox.Show("ERSTELLT")
    5. ligen = LigaAuslesen.Matches(a.Value)
    6. For Each liga As Match In ligen
    7. MessageBox.Show(liga.Groups("content").Value)
    8. Next
    9. Next
    @shaebich:: Wenn der Dateiinhalt klar ist, mach es so:

    VB.NET-Quellcode

    1. IO.File.WriteAllText(DEIN_PFAD, DEIN_INHALT)
    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!

    ErfinderDesRades schrieb:

    ich täte mal wieder typisiertes Dataset empfehlen. Sieht sehr nach einer Datenverarbeitung aus, und da wird man mit 100 Textdateien glaub nicht froh.
    Datenbänkerei-Einstieg

    Ja es wird zur Datenbänkerei :)...

    Allerdings stehen in den Textdateien nur Links für meine Regex funktion welche sich nicht täglich ändern.
    Ich bin mir nicht sicher ob sich für eine "eigentlich" so triviale aufgabe eine Datenbank lohnt.

    shaebich schrieb:

    eine "eigentlich" so triviale aufgabe
    Kannst Du die mal etwas näher beschreiben?
    Vllt finden wir gemeinsam eine bessere Lösung.
    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!
    Ok...hier ist meine Methode um auf oddsway.com die SportWetten Quoten zu extrahieren.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub dgvFill3()
    2. Dim oddswaycode = New Net.WebClient().DownloadString("http://www.oddsway.com")
    3. ' ==! Für AL Proxy Login !==
    4. 'Dim oddswaycode1 = New Net.WebClient
    5. 'oddswaycode1.Proxy.Credentials = New Net.NetworkCredential(User, Password)
    6. 'Dim oddswaycode = oddswaycode1.DownloadString("http://www.oddsway.com")
    7. Dim leagueAuslesen As New Regex("(<!--Leagues-->).*?(<!--End of Left Column-->)", RegexOptions.Singleline)
    8. Dim leagueTest As MatchCollection = leagueAuslesen.Matches(oddswaycode)
    9. Dim ligalink As String
    10. Dim counter As Integer = 0
    11. For Each a As Match In leagueTest
    12. Dim subleagueAuslesen As New Regex("<a href=""(?<link>(.*?))"".*?>(?<liga>(.*?))</a>", RegexOptions.Singleline)
    13. Dim ligaTest As MatchCollection = subleagueAuslesen.Matches(a.Value)
    14. For Each b As Match In ligaTest
    15. Dim zuSuchendeLiga = DataGridView1.Rows(ausgewaehlteZeile).Cells(9).Value
    16. Dim gefundeneLiga = getOddswayLigaName(zuSuchendeLiga)
    17. 'MessageBox.Show(gefundeneLiga)
    18. If Regex.IsMatch(b.Groups("liga").Value, gefundeneLiga, RegexOptions.IgnoreCase) Then
    19. ligalink = b.Groups("link").Value
    20. Dim ligaoddswaycode1 = New Net.WebClient
    21. ligaoddswaycode1.Proxy.Credentials = New Net.NetworkCredential(User, Password)
    22. Dim ligaoddswaycode = ligaoddswaycode1.DownloadString(ligalink)
    23. Dim subsubsubleagueAuslesen As New Regex("<a width=100% title=""Click To Compare Odds"" href=""(?<link1>(.*?))"">(?<mannschaften>(.*?))<\/td>", RegexOptions.Singleline)
    24. Dim submannschaftTest As MatchCollection = subsubsubleagueAuslesen.Matches(ligaoddswaycode)
    25. For Each d As Match In submannschaftTest
    26. Dim nameDerMannschaft() As String = DataGridView1.Rows(ausgewaehlteZeile).Cells(0).Value.Split(" ")
    27. Dim counterArray = nameDerMannschaft.Length - 1
    28. For z = counterArray To 0 Step -1
    29. 'MessageBox.Show(nameDerMannschaft(z))
    30. If Regex.IsMatch(d.Groups("mannschaften").Value, nameDerMannschaft(z), RegexOptions.IgnoreCase) Then
    31. Dim re1 As String = "http://www.oddsway.com"
    32. Dim re2 As String = d.Groups("link1").Value
    33. 'MessageBox.Show("Der nächste Link ist: " & re1 + re2)
    34. Call dgvFill2(re1 + re2)
    35. Exit Sub
    36. Else
    37. 'MessageBox.Show("Keine Quoten für " & nameDerMannschaft & " vorhanden.")
    38. End If
    39. Next
    40. Next
    41. Else
    42. End If
    43. Next
    44. Next
    45. End Sub





    So bitte kein flame wegen namen etc.
    war anfangs nur zum Regex üben. Nachdem die sub dann funktioniert hat und mir wirklich das angezeigt hat was ich wollte hab ich halt ein bisschen weiter gemacht.

    die Methode Call dgv...2 etc ruft nur die Methode auf um die Quoten der verschiedenen Buchmacher zu regexen.

    Bisher läuft alles in ein DGV, da ich anfang ja eig. nur die schnell Anzeige der Daten wollte :D.


    Nachdem nun alles so aussah wie ich wollte, habe ich mir gedacht ich mache ein kleines Programm in welchem man eine Partie ausgewählt und dieser mir dann in einem anderen Grid die Quoten dafür anzeigt.




    Jetzt war mir diese Methode aber zu langsam, da bei jedem Klick die Daten neu geladen und geregext wurden. Also wollte ich die Schritte welche sich wiederholen, aber ändern können als Update funktion schreib und in Textdateien speichern zum schnellen auslesen.

    Funktion zum Sourcecode DL:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub oddswaySourcecodeDL(ByVal url As String, ByVal dateiname As String, Optional ByVal ordnername As String = Nothing, Optional ByVal unterordner As String = Nothing)
    2. Dim sourcecode = New Net.WebClient
    3. 'Dim input1 = New Net.WebClient
    4. sourcecode.Proxy.Credentials = New Net.NetworkCredential("xxxx", "xxxxxx")
    5. Dim urlDl As String = url
    6. Dim directory As New DirectoryInfo(ordnername & "/" & unterordner & "/")
    7. Dim directory2 As New DirectoryInfo(ordnername & "/" & unterordner & "/")
    8. pfadOddswaycode = New FileInfo(directory.FullName & dateiname)
    9. If Not directory.Exists Then
    10. directory.Create()
    11. MessageBox.Show("Verzeichniss erstellt")
    12. Else
    13. End If
    14. If Not pfadOddswaycode.Exists Then
    15. sourcecode.DownloadFileAsync(New Uri(url), pfadOddswaycode.ToString)
    16. Else
    17. ' DEBUGGING MessageBox.Show("Pfad existiert bereits")
    18. End If
    19. 'DEBUGGING
    20. MessageBox.Show(pfadOddswaycode.ToString)
    21. End Sub


    Dannach wollte ich für jedes Land im Menü eine eigene Textdatei erstellen in welcher die Ligen mit directlink zur Quotenseite stehen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub oddswayLigaSourcecodeDL()
    2. Dim pfadOddswayLigaCode = File.ReadAllText(pfadOddswaycode.FullName)
    3. Dim dateiOddswayLiga As FileInfo
    4. Dim directory As New DirectoryInfo("source\files\ligen")
    5. directory.Create()
    6. Dim LandAuslesen As New Regex("<li><a.*?>(?<Liga1>(.*?))<\/a><\/li>.*?(?<group1>(<ul id=""sub_nav_(?<Land>(.*?))"".*?>(?<Liga>(.*?))<\/ul>))", RegexOptions.Singleline)
    7. Dim LigaAuslesen As New Regex("<li><a.*?href=""(?<contentlink>(.*?))"".*?>(?<content>(.*?))<\/a><\/li>", RegexOptions.Singleline)
    8. Dim laender As MatchCollection = LandAuslesen.Matches(pfadOddswayLigaCode)
    9. Dim ligen As MatchCollection
    10. For Each a As Match In laender
    11. Dim liganame = a.Groups("Liga1").Value
    12. dateiOddswayLiga = New FileInfo(directory.FullName & liganame & ".txt")
    13. ligen = LigaAuslesen.Matches(a.Groups("group1").Value)
    14. For Each liga As Match In ligen
    15. IO.File.AppendAllText(dateiOddswayLiga.FullName, "<Liganame>" & liga.Groups("content").Value & "</Liganame>" & " " & "<Link>" & liga.Groups("contentlink").Value & "</Link>" & vbCrLf)
    16. Next
    17. Next
    18. MessageBox.Show("Alle Dateien wurden erstellt")
    19. End Sub






    Fand bisher meine Idee eigendlich gar nicht so schlecht :D

    *Potenzielle Zugangsdaten entfernt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Jenni Jenni,

    VB.NET-Quellcode

    1. sourcecode.Proxy.Credentials = New Net.NetworkCredential("xxxxx", "xxxxxxx")


    Als kleiner Tipp, ich würde (a) keine Logins hardcodieren und (b) Logins rausnhemen oder abändern wenn ich den Code irgendwo öffentlich poste :)

    LG, Jenni Herbrich

    *Potenzielle Zugangsdaten entfernt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Der User ist seit 6 Jahren nicht mehr dagewesen. Daher auch hier: closed
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.