Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 关于动态数组的混淆_Arrays_Vbscript - Fatal编程技术网

Arrays 关于动态数组的混淆

Arrays 关于动态数组的混淆,arrays,vbscript,Arrays,Vbscript,好的,我使用下面的代码读取文本文件并将其显示到一个带有VBScript的HTA中,它会循环遍历文件夹中的所有文本文件(注释)。我让它解析返回并从显示中删除了文件扩展名 我想做的是构建2个数组,一个用于文件名,一个用于文本文件内容,这样我就可以在脚本的其他部分使用它们来根据需要输出 我知道我需要一个动态数组,在循环中它需要扩展它的intsize,这只是我不确定的实现,特别是它可能是一个二维数组,以保持文件名和内容在一起。这是代码 Set objFSO = CreateObject("Scripti

好的,我使用下面的代码读取文本文件并将其显示到一个带有VBScript的HTA中,它会循环遍历文件夹中的所有文本文件(注释)。我让它解析返回并从显示中删除了文件扩展名

我想做的是构建2个数组,一个用于文件名,一个用于文本文件内容,这样我就可以在脚本的其他部分使用它们来根据需要输出

我知道我需要一个动态数组,在循环中它需要扩展它的intsize,这只是我不确定的实现,特别是它可能是一个二维数组,以保持文件名和内容在一起。这是代码

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "Notes\"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files
   For Each objFile in colFiles
   If UCase(objFSO.GetExtensionName(objFile.name)) = "TXT" Then

        Files = objStartFolder & objFile.name
        Set objReadFile = objFSO.OpenTextFile(Files, 1)

        strExt = Left(objFile.name, Len(objFile.name)-4)
        strNote = Replace(objReadFile.ReadAll, vbCRLF, "<br>")

    objReadFile.Close

        document.write strExt & "<br><br>"
        document.write strNote & "<br><br>"

    else
    document.write ="File was empty"

    End If
Next
Set objFSO=CreateObject(“Scripting.FileSystemObject”)
objStartFolder=“Notes\”
设置objFolder=objFSO.GetFolder(objStartFolder)
设置colFiles=objFolder.Files
对于colFiles中的每个objFile
如果UCase(objFSO.GetExtensionName(objFile.name))=“TXT”,则
Files=objStartFolder&objFile.name
设置objReadFile=objFSO.OpenTextFile(文件,1)
strExt=Left(objFile.name,Len(objFile.name)-4)
strNote=Replace(objReadFile.ReadAll,vbCRLF,“
”) objReadFile.Close document.write strExt&“

” document.write strNote&“

” 其他的 document.write=“文件为空” 如果结束 下一个
使用二维数组应该可以相当轻松地完成此操作

由于您知道文件的数量,因此无需在循环文件时使用
Preserve
动态调整数组大小,只需声明一个动态数组,然后使用
ReDim
设置初始尺寸

Dim数据()
...
暗淡指数
ReDim数据(1,colFiles.Count-1)
对于colFiles中的每个objFile
...
数据(0,索引)=objFile.Name
数据(1,索引)=strNote
索引=索引+1
下一个
擦除数据
表示为强调添加内容而省略的现有代码

更新: OP想要一个完整的例子,因为不清楚上面的代码如何适合他们的例子,所以这里

选项显式
Dim objFSO、objFolder、colFiles、objFile、objReadFile
Dim objStartFolder、文件、strExt、strNote
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
objStartFolder=“Notes\”
设置objFolder=objFSO.GetFolder(objStartFolder)
Dim数据(),索引
设置colFiles=objFolder.Files
'不需要保留,因为我们有colFiles文件集合中的计数。
ReDim数据(1,colFiles.Count-1)
对于colFiles中的每个objFile
如果UCase(objFSO.GetExtensionName(objFile.name))=“TXT”,则
Files=objStartFolder&objFile.name
设置objReadFile=objFSO.OpenTextFile(文件,1)
strExt=Left(objFile.name,Len(objFile.name)-4)
strNote=Replace(objReadFile.ReadAll,vbCRLF,“
”) objReadFile.Close "释放资源", Set objReadFile=Nothing document.write strExt&“

” document.write strNote&“

” '填充数组 数据(0,索引)=objFile.Name 数据(1,索引)=strNote 索引=索引+1 其他的 document.write=“文件为空” 如果结束 下一个 "释放资源", 擦除数据 设置colFiles=Nothing 设置objFolder=Nothing 设置objFSO=Nothing
此代码未经测试

我自己用一个可以使用cscript调用的示例对此进行了测试

选项显式
Dim fs、文件夹、文件、文件
暗i、r、c
设置fs=CreateObject(“Scripting.FileSystemObject”)
Set folder=fs.GetFolder(“C:\”)
Set files=folder.files
Dim数据()
ReDim数据(1,files.Count-1)
对于文件中的每个文件
数据(0,i)=文件名
数据(1,i)=文件路径
i=i+1
下一个
对于r=LBound(数据,2)到UBound(数据,2)
对于c=LBound(数据,1)到UBound(数据,1)
WScript.Echo“数据(“&c&”,“&r&””=“&data(c,r))
下一个
下一个
擦除数据
设置文件=无
设置文件夹=无
设置fs=Nothing

使用
cscript.exe
从命令行运行此命令,因为
wscript.exe
将生成大量的弹出框。

或使用字典。@eurotrash更喜欢数组来提高性能,而不是COM对象。很抱歉,Lankymart,我对逻辑语句、设置变量和基本代码没有意见,但数组让我有点困惑。我需要更多的解释,这样我才能理解。你能不能编辑你的帖子,把你的代码和我的代码放在一起,解释一下输出数据的方法(比如用innerhtml,甚至只是一个变量)。PS:数组的大小将只受Notes目录中txt文件的数量限制。@Ctrlaltdenied该代码应该正好适合您现有的代码,但稍后将修改答案。我现在出去通过我的手机发表评论。够公平的,伙计,我想我知道它会去哪里,但我还不太了解数组,以及如何操纵它们。我宁愿明白我在说什么。谢谢,没有问题。@Ctrlaltdenied当谈到二维数组时,最简单的思考方法就像是表格中的列和行。第一个维度是列,第二个维度是行,因此在本例中,您有两列,但有多少行由
colFiles.Count-1
指定。