Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Private Shared ReadOnly Rnd As New Random(Now.Millisecond)
- Public Shared Sub RandomizeLines(targetFile As String, Optional randomizeRate As Integer = 10, Optional keepFile As Boolean = False)
- randomizeRate = Math.Max(randomizeRate, 2)
- 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
- Dim o As Integer
- Dim lastIndex As Integer
- Using fs As FileStream = File.OpenRead(targetFile)
- Using sr As New StreamReader(fs)
- While Not sr.EndOfStream
- o = Rnd.Next(randomizeRate)
- While o = lastIndex
- o = Rnd.Next(randomizeRate)
- If o = lastIndex Then
- o = Math.Min(o + 1, randomizeRate - 1)
- End If
- End While
- lastIndex = o
- writers(o).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
- If keepFile Then
- Try
- File.Delete(targetFile)
- Rename(currFile, targetFile)
- Catch ex As Exception
- End Try
- End If
- End Sub
Advertisement