gpt4 book ai didi

text - 使用 VBscript 替换 CSV 文件中的数字,而不替换所有文本

转载 作者:行者123 更新时间:2023-12-02 12:17:01 25 4
gpt4 key购买 nike

我正在编写此代码

Dim strFirm,soNumber,strValues,arrStr,strCitrix,NewText,text

strFirm = "Gray"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("cloud.csv",1,True)

Do while not objTextFile.AtEndOfStream
arrStr = Split(objTextFile.ReadLine, ",")
If arrStr(0) = strFirm Then
soNumber = arrStr(1)
Exit Do
End If
Loop

objTextFile.Close

strCitrix = soNumber + 1

MsgBox "Cloud Client " & strFirm & " is now using " & strCitrix & " Citrix licenses."

NewText = Replace(soNumber, soNumber, strCitrix)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("cloud.csv",2,True)
objTextFile.Writeline NewText
objTextFile.Close

但是,当我运行代码时,替换会清除文件中除我正在写入的数字之外的所有文本。

我想要它做的是将所有其他文本保留在原处,并且仅更改一个指定的变量。

示例

Client1,5
Client2,7
Client3,12
Gray,6
Client4,9
Client5,17
Client6,8

运行脚本后

Client1,5
Client2,7
Client3,12
Gray,7
Client4,9
Client5,17
Client6,8

谁能指出我做错了什么?

预先感谢您的帮助。

最佳答案

您的输出文件仅包含您要更改的数字,因为您从文件中读取的文本中仅提取该数字:

soNumber = arrStr(1)

加一:

strCitrix = soNumber + 1

soNumber 中的数字(无论如何只包含数字)替换为递增的数字:

NewText = Replace(soNumber, soNumber, strCitrix)

然后仅将新数字写回文件:

objTextFile.Writeline NewText

要保留原始内容中您想要保留的部分,您还需要将它们写回文件,而不仅仅是修改后的内容。

如果您逐行读取源文件(这在处理大文件时是一个好主意,因为它可以避免内存耗尽),您应该将输出写入临时文件:

Set inFile  = objFSO.OpenTextFile("cloud.csv")
Set outFile = objFSO.OpenTextFile("cloud.csv.tmp", 2, True)

Do while not objTextFile.AtEndOfStream
line = inFile.ReadLine
arrStr = Split(line, ",")
If arrStr(0) = strFirm Then
soNumber = CInt(arrStr(1))
outFile.WriteLine arrStr(0) & "," & (soNumber + 1)
Else
outFile.WriteLine line
End If
Loop

inFile.Close
outFile.Close

然后用修改后的文件替换原始文件:

objFSO.DeleteFile "cloud.csv", True
objFSO.MoveFile "cloud.csv.tmp", "cloud.csv"

但是,如果您的输入文件很小,则读取整个文件、处理它并使用修改后的内容覆盖该文件会更容易:

text = Split(objFSO.OpenTextFile("cloud.csv").ReadAll, vbNewLine)

For i = 0 To UBound(text)
If Len(text(i)) > 0 Then
arrStr = Split(text(i), ",")
If arrStr(0) = strFirm Then
soNumber = CInt(arrStr(1))
text(i) = arrStr(0) & "," & (soNumber + 1)
End If
End If
Next

objFSO.OpenTextFile("cloud.csv", 2, True).Write Join(text, vbNewLine)

Len(text(i)) > 0 检查用于跳过空行(包括文件末尾的尾随换行符),因为空字符串被拆分为空数组,这会导致反过来会使检查 arrStr(0) = strFirm 失败,并出现 index out ofbounds 错误。

关于text - 使用 VBscript 替换 CSV 文件中的数字,而不替换所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com