我的数据是这样的:VBScript - 如何通过数值对文本文件中的字母数字字符串进行排序?
9999.81GB increase - "c:\$RECYCLE.BIN" 1.91GB total
11.54GB increase - "c:\Program Files (x86)" 11.55GB total
101.57GB increase - "c:\Windows" 101.61GB total
我希望它看起来像这样:
9999.81GB increase - "c:\$RECYCLE.BIN" 1.91GB total
101.57GB increase - "c:\Windows" 101.61GB total
11.54GB increase - "c:\Program Files (x86)" 11.55GB total
我一直在试图冒泡排序此。我假设我需要首先在第一个“。”之前将字符串分开。这将是一个可用于排序的数字。我已经用类似这样的方法来解决这个问题:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("C:\Source.txt", ForReading)
Do Until objFile1.AtEndOfStream
FileContent = objFile1.ReadLine
arr1 = Split(FileContent,".",2)
arr2 = Array(arr1(0))
For i=0 to UBound(arr2)
WScript.Echo arr2(i)
Next
Loop
但是,我不需要回显,而是需要在气泡排序中使用这些值。这是我似乎被卡住的地方。
我打算使用不同类型的排序..但永远不会有很多行来排序,所以我想泡沫可能是一个不错的选择。
这里是我已经能够做到最好:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOpen = objFSO.OpenTextFile("C:\Source.txt", ForReading)
Do Until objOpen.AtEndOfStream
FileContent = objOpen.ReadLine
arr1 = Split(FileContent,".",2)
arr2 = Array(arr1(0))
Do
x = UBound(arr2)
y = -1
For j = LBound(arr2) to x - 1
If arr(j) > arr2(j + 1) Then
TempValue = arr2(j + 1)
arr2(j + 1) = arr2(j)
arr2(j) = TempValue
y = j
End If
Next
x = y
Loop Until y = -1
z = ""
For i = UBound(arr2) To LBound(arr2)
z = z & arr2(i) & "." & arr1(1) & vbCrlf
Next
Loop
WScript.echo z
但这只是输出的最后一行,并没有出现有甚至试图进行排序。
我是新来的:)任何帮助将不胜感激。
亚瑟
单位是否总是用GB表示? – Tomalak
它们最初在KB中没有标记为KB。通过以前的流程,我将它们转换为GB并添加了“GB”以便于阅读。 但是,您的问题的答案是,在“source.txt”中,因为它现在存在,它始终是GB。 – ApexArthur
请注意,使用的数字可能没有意义(增加与总数) - 我手动输入它们用于测试目的。 – ApexArthur