原文件内容如下(文件很大,约有15万行):
2001110100 25325.0
2001110101 25635.0
2001110102 26035.0
2001110103 26345.0
2001110104 26700.0
2001110105 26955.0
2001110106 27130.0
2001110107 27170.0
2001110108 27170.0
2001110109 27070.0
2001110110 26850.0
2001110111 26580.0
2001110112 26320.0
2001110113 26045.0
……
……
……
怎样将文件里第二列的每个数据乘以固定值(如0.32)并将结果输出为另一个文件?
格式如下:(保留一位小数)
2001110100 8104.0
2001110101 8203.2
……
……
……多谢!!!
2001110100 25325.0
2001110101 25635.0
2001110102 26035.0
2001110103 26345.0
2001110104 26700.0
2001110105 26955.0
2001110106 27130.0
2001110107 27170.0
2001110108 27170.0
2001110109 27070.0
2001110110 26850.0
2001110111 26580.0
2001110112 26320.0
2001110113 26045.0
……
……
……
怎样将文件里第二列的每个数据乘以固定值(如0.32)并将结果输出为另一个文件?
格式如下:(保留一位小数)
2001110100 8104.0
2001110101 8203.2
……
……
……多谢!!!
Private Sub Command1_Click()
Dim istr As String
Dim iistr() As String
Dim ijstr() As String
Open "d:\11xx.txt" For Input As #1
Open "d:\11xx-1.txt" For Output As #2
istr = Input(LOF(1), 1)
iistr = Split(istr, vbCrLf)
For i = 0 To UBound(iistr)
ijstr = Split(iistr(i))
If UBound(ijstr) < 1 Then Exit For
ijstr(1) = FormatNumber(ijstr(1) * 0.35, 1, vbTrue, vbFalse, vbFalse)
iistr(i) = Join(ijstr)
Next
istr = Join(iistr, vbCrLf)
Print #2, istr
Close
MsgBox "OK"
End Sub
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)'写二进制文件
Private Sub Command1_Click()
Dim a(), b()
Dim FileNumber As Long, i As Long
a = Array(2001110100, 2001110101, 2001110102, 2001110103, 2001110104, 2001110105, 2001110106, 2001110107, 2001110108, 2001110109, 2001110110, 2001110111, 2001110112, 2001110113)
b = Array(25325#, 25635#, 26035#, 26345#, 26700#, 26955#, 27130#, 27170#, 27170#, 27070#, 26850#, 26580#, 26320#, 26045#)
FileNumber = FreeFile
Open "c:\SourceFile.txt" For Binary As #FileNumber
For i = 0 To UBound(a)
Put #FileNumber, , CLng(a(i))
Put #FileNumber, , CDbl(b(i))
Next
Close #FileNumber
End Sub'读二进制文件
Private Sub Command2_Click()
'Dim a(), b()
Dim FileNumber As Long, i As Long, j As Long
Dim a As Long, b As Double
Dim c(1 To 4) As Byte, d(1 To 8) As Byte
FileNumber = FreeFile
Open "c:\SourceFile.txt" For Binary As #FileNumber
j = 0
For i = 1 To LOF(FileNumber) Step 12
Get #FileNumber, i, c(1)
Get #FileNumber, i + 1, c(2)
Get #FileNumber, i + 2, c(3)
Get #FileNumber, i + 3, c(4)
Get #FileNumber, i + 4, d(1)
Get #FileNumber, i + 5, d(2)
Get #FileNumber, i + 6, d(3)
Get #FileNumber, i + 7, d(4)
Get #FileNumber, i + 8, d(5)
Get #FileNumber, i + 9, d(6)
Get #FileNumber, i + 10, d(7)
Get #FileNumber, i + 11, d(8)
'a = CLng("&H" & Hex(c(4)) & Hex(c(3)) & Hex(c(2)) & Hex(c(1)))
'b = CDbl("&H" & Hex(d(1)) & Hex(d(2)) & Hex(d(3)) & Hex(d(4)) & Hex(d(5)) & Hex(d(6)) & Hex(d(7)) & Hex(d(8)))
CopyMemory a, c(1), 4
CopyMemory b, d(1), 8
Debug.Print a, b '这里的a和b可分别保存到一个数组中,然后将b乘以0.32后,将这2个数组保存到另外一个二进制文件中,方法如Command1的代码
Next
Close #FileNumber
End Sub
Dim i As Long
Dim strText As String
Dim strLines() As String
Dim strFields() As String
'读文件
Open App.Path & "\file1.txt" For Binary As #1
strText = Input(LOF(1), 1)
Close #1
strLines = Split(strText, vbCrLf)
strText = vbNullString
'第2列乘0.32
For i = 0 To UBound(strLines)
strFields = Split(strLines(i), " ")
strLines(i) = strFields(0) & " " & VBA.FormatNumber(strFields(1) * 0.32, 1, vbFalse, vbFalse, vbFalse)
If (i Mod 1000) = 0 Then DoEvents
Next
strText = Join(strLines, vbCrLf)
Erase strLines
'保存结果
Open App.Path & "\file2.txt" For Binary As #1
Put #1, , strText
Close