【发布时间】:2018-03-10 16:58:11
【问题描述】:
我正在编写一个读取文本文件的脚本。在标题行之后,我读取了数据行。在读入每个数据行时,AssetID 和 Description 列中的字符串值将被打乱。我在制表符分隔符上分割每一行。知道AssetID在数组位置1,Description在位置2,就可以得到字符串了。
我想知道一种打乱两个字符串的简单方法。这里有一些代码供参考。
附:现在我对循环进行了注释,以便我可以测试第一个标题行上的“加扰”,以确保它在我在整个项目中实施之前有效。
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("AssetImport.txt", ForReading)
Set objFile2 = objFSO.CreateTextFile("\newnewnew.txt")
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
arrFields = Split(strLine, vbTab)
If (UBound(arrFields) = 1) Then
'script to write header lines here
objFile2.WriteLine arrFields(0)
Else
'scramble AssetID and Description Columns, then write
Randomize
objFile2.WriteLine arrFields(0)
arrFields(1) = Scramble(arrFields(1))
objFile2.WriteLine arrFields(1)
objFile2.WriteLine arrFields(2)
objFile2.WriteLine arrFields(3)
objFile2.WriteLine arrFields(4)
arrFields(5) = Scramble(arrFields(5))
objFile2.WriteLine arrFields(5)
objFile2.WriteLine arrFields(6)
End If
Loop
objFile.Close
objFile2.Close
Function Scramble(s)
Dim i, j, n
Dim temp, shuffled
n = Len(s)
ReDim shuffled(n - 1)
For i = 1 To n
shuffled(i - 1) = Mid(s, i, 1)
Next
For i = 0 To n - 2
j = i + Int((n - i) * Rnd())
temp = shuffled(i)
shuffled(i) = shuffled(j)
shuffled(j) = temp
Next
Scramble = Join(shuffled, "")
结束函数
【问题讨论】:
-
能否请您添加一个txt文件示例?
-
txt 文件如下所示... headerline1 headerline2 headerline3 columnName1,columnName2...columnName7 data1 data2 data3 data4 data5 data6 data7 data1 data2 data3 data4 data5 data6 data7 data1 data2 data3 data4 data5 data6 data7 ... data1 data2 data3 data4 data5 data6 data7(文件结尾)
-
加扰数据的目的是什么?你需要在某个时候解读它吗?
-
这是个好问题,老实说我不知道打乱数据的原因。作为任务交给我完成。我没有放任何原始数据或文件位置,因为我不知道我是否有权这样做。谢谢!
-
另外,在我注释的txt文件格式中,它没有注册我输入的换行符。所以每个标题行都是一个单独的行。并且每个数据(n)都是制表符分隔的,data1-data7 重复都在单独的“行”上。希望这会有所帮助!
标签: string random vbscript scramble