我希望脚本读取.txt文件并写入每行末尾的变量结果,而不是MsgBox,在我的例子中是$ FileSize
以下是自动脚本的代码
if(chosenMan.GetType() == typeof(man1)){
man1 man11= new man1();
Console.WriteLine(man11.val); //No Error
}if(chosenMan.GetType() == typeof(man2)){
man1 man22= new man1();
Console.WriteLine(man22.val); //No Error
}if(chosenMan.GetType() == typeof(man3)){
man1 man33= new man1();
Console.WriteLine(man33.val); //No Error
}
以下是.txt文件的内容
#include <MsgBoxConstants.au3>
#include <File.au3>
Test()
Func Test()
For $i = 1 to _FileCountLines(@TempDir & "\myfiles.txt")
$mread = FileReadLine(@TempDir & "\myfiles.txt", $i)
Local $FileSize = FileGetSize($mread)
MsgBox($MB_SYSTEMMODAL, "", ByteSuffix($FileSize)) ;this is just a test
Next
EndFunc ;==>Example
Func ByteSuffix($Bytes)
Local $Index = 0, $aArray = [' bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']
While $Bytes > 1023
$Index += 1
$Bytes /= 1024
WEnd
Return Round($Bytes) & $aArray[$Index]
EndFunc
我想要以下结果
C:\Users\G-PC\Documents\setup.exe
C:\Users\G-PC\Documents\config.ini
C:\Users\G-PC\Documents\image001.jpg
C:\Users\G-PC\Documents\image002.jpg
C:\Users\G-PC\Documents\image003.jpg
答案 0 :(得分:2)
有size limit for both string variables and arrays,因此在处理大文件时,您必须一次处理一行。这使用临时文件进行输出,而不是将所有信息保存在内存中。您可以将临时文件重命名(覆盖原始文件)到最后的原始文件名。
Func Test()
Local $InFile = FileOpen(@TempDir & "\myfiles.txt", $FO_READ)
Local $OutFile = FileOpen(@TempDir & "\myfiles.tmp", $FO_OVERWRITE)
While True
$File = FileReadLine($InFile)
If @error = -1 Then Return ; no more lines to process
FileWrite($OutFile, $File & " [" & ByteSuffix(FileGetSize($File)) & "]" & @CRLF)
WEnd
EndFunc ;==>Test
答案 1 :(得分:1)
$sResult = Test()
ConsoleWrite('SIZE LIST' & @CRLF & $sResult)
Func Test()
Local $FileSize, $sReturn = ''
For $i = 1 to _FileCountLines(@TempDir & "\myfiles.txt")
$mread = FileReadLine(@TempDir & "\myfiles.txt", $i)
$FileSize = FileGetSize($mread)
; MsgBox($MB_SYSTEMMODAL, "", ByteSuffix($FileSize)) ;this is just a test
$sReturn &= $mread & " [" & ByteSuffix($FileSize) & "]" & @CRLF
Next
Return $sReturn
EndFunc ;==>Test
但是更好的方法是使用_FileReadToArray而不是逐行读取文本文件。你可以用文本行迭代数组。
答案 2 :(得分:1)
在循环中使用FileReadLine
的行号参数重置
指向开始的文件指针,并扫描到减慢的行号
随着行数的增加而下行。省略那个参数。
使用文件句柄,这样就不会继续打开和关闭 在循环中读取每行的文件。
#include <MsgBoxConstants.au3>
#include <File.au3>
$sResult = Test()
MsgBox(0, @ScriptName, $sResult)
Func Test()
Local $iFileSize, $hFile, $sFilePath, $sResult
; Open a file handle to read.
$hFile = FileOpen(@TempDir & "\myfiles.txt")
If $hFile = -1 Then
MsgBox(0x30, @ScriptName, 'Unable to open file to read.')
Exit 1
EndIf
While 1
; Read and let AutoIt handle line count.
$sFilePath = FileReadLine($hFile)
If @error Then ExitLoop
$iFileSize = FileGetSize($sFilePath)
If @error Then ContinueLoop
$sResult &= StringFormat('%s %s\r\n', $sFilePath, ByteSuffix($iFileSize))
WEnd
FileClose($hFile)
Return $sResult
EndFunc
Func ByteSuffix($Bytes)
Local $Index = 0
Local $aArray = [' bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']
While $Bytes > 1023
$Index += 1
$Bytes /= 1024
WEnd
Return Round($Bytes) & $aArray[$Index]
EndFunc