datatheoz icon

Randomize File Lines

datatheoz | PRO | 07/06/15 02:02:35 PM UTC | 0 ⭐ | 518 👁️ | Never ⏰ | []
VB.NET |

3.14 KB

|

None

|

0 👍

/

0 👎

Imports System.IO
 
Public Class FileUtility
    Private Shared ReadOnly Rnd As New Random(Now.Millisecond)
 
    Public Shared Sub RandomizeLines(targetFile As String, Optional randomizeRate As Integer = 10)
        If randomizeRate < 2 Then randomizeRate = 10
 
        Dim currPath As String = Path.GetDirectoryName(targetFile)
        Dim currFile As String = Path.Combine(currPath, Path.GetFileNameWithoutExtension(targetFile) & " (Randomized)" & Path.GetExtension(targetFile))
        Dim currWriter As String
 
        Dim writers() As StreamWriter = {}
        Array.Resize(writers, randomizeRate)
        For i As Integer = 0 To randomizeRate - 1
            writers(i) = New StreamWriter(Path.Combine(currPath, "temp" & i.ToString & ".txt")) 'With {.AutoFlush = True}
        Next
 
        Using fs As FileStream = File.OpenRead(targetFile)
            Using sr As New StreamReader(fs)
                While Not sr.EndOfStream
                    writers(Rnd.Next(randomizeRate)).WriteLine(sr.ReadLine())
                End While
            End Using
        End Using
 
        Using sw As New StreamWriter(currFile) 'With {.AutoFlush = True}
            For i As Integer = 0 To randomizeRate - 1
                writers(i).Dispose()
                currWriter = Path.Combine(currPath, "temp" & i.ToString & ".txt")
                Using reader As New StreamReader(currWriter)
                    While Not reader.EndOfStream
                        sw.WriteLine(reader.ReadLine)
                    End While
                End Using
                File.Delete(currWriter)
            Next
        End Using
    End Sub
 
    Public Shared Sub RandomizeLinesHaze(targetFile As String, Optional randomizeRate As Integer = 10)
        If randomizeRate < 2 Then randomizeRate = 10
 
        Dim currPath As String = Path.GetDirectoryName(targetFile)
        Dim currFile As String = Path.Combine(currPath, Path.GetFileNameWithoutExtension(targetFile) & " (Randomized)" & Path.GetExtension(targetFile))
        Dim currWriter As String
 
        Dim lstWriters As New List(Of StreamWriter)
        For i As Integer = 0 To randomizeRate - 1
            lstWriters.Add(New StreamWriter(Path.Combine(currPath, "temp" & i.ToString & ".txt")) 'With {.AutoFlush = True})
        Next
 
        Using fs As FileStream = File.OpenRead(targetFile)
            Using sr As New StreamReader(fs)
                While Not sr.EndOfStream
                    lstWriters(Rnd.Next(randomizeRate)).WriteLine(sr.ReadLine())
                End While
            End Using
        End Using
 
        Using sw As New StreamWriter(currFile) 'With {.AutoFlush = True}
            For i As Integer = 0 To randomizeRate - 1
                lstWriters(i).Dispose()
                currWriter = Path.Combine(currPath, "temp" & i.ToString & ".txt")
                Using reader As New StreamReader(currWriter)
                    While Not reader.EndOfStream
                        sw.WriteLine(reader.ReadLine)
                    End While
                End Using
                File.Delete(currWriter)
            Next
        End Using
    End Sub
End Class

Comments