boyhong 发表于 2012-6-14 08:36:35

[已解决]一个log文件无法一行行读取出来

本帖最后由 boyhong 于 2012-6-14 09:41 编辑

一个log文件无法一行行读取出来,我是用如下代码来读行。。

If FileExists(@ScriptDir&"\faultykeyboard.log") Then
Local $file = FileOpen(@ScriptDir&"\faultykeyboard.log",0)
If $file <> -1 Then
; 每次读取一行文本,直到文件结束.
For $i=1 To 10
    Local $line = FileReadLine($file,$i)
    If @error = -1 Then ExitLoop
    MsgBox(0, "第"&$i&"行:", $line)
Next
FileClose($file)
EndIf
EndIf


为什么呢?我抱着试验的态度更改fileopen后的参数,看是否Unicode的原因,但不怎么懂,希望大家帮我分析一下,若能讲解一下就更是我等菜鸟之福了:
测试文件下载:http://pan.baidu.com/netdisk/singlepublic?fid=377820_692661576

afan 发表于 2012-6-14 08:59:25

Local $sFile = @ScriptDir & '\faultykeyboard.log'
If Not FileExists($sFile) Then Exit -1
Local $hfile = FileOpen($sFile, 32), $iL = 1, $line
While 1
        $line = FileReadLine($hfile)
        If @error = -1 Then ExitLoop
        MsgBox(0, '第' & $iL & '行:', $line)
        $iL += 1
WEnd
FileClose($hfile)

afan 发表于 2012-6-14 09:06:15

如果需要创建数组 则用正则更方便Local $sFile = @ScriptDir & '\faultykeyboard.log'
If Not FileExists($sFile) Then Exit -1
Local $hfile = FileOpen($sFile, 32)
Local $str = FileRead($hfile)
FileClose($hfile)
Local $aSR = StringRegExp($str, '\V+', 3), $iL
If @Error Then Exit -2
For $iL = 0 To UBound($aSR) - 1
        MsgBox(0, '第' & $iL + 1 & '行:', $aSR[$iL])
Next

user3000 发表于 2012-6-14 09:10:27

回复 1# boyhong
也可以这样读, 如果懒得多打一两行代码:
#include <file.au3>
Local $a
_FileReadToArray(@ScriptDir & '\faultykeyboard.log', $a)
If @error Then Exit MsgBox(16, 'Err', '读取文件内容失败!')
For $i = 1 To $a
        MsgBox(0, '文件内容', '第 ' & $i & ' 行: ' & @CRLF & $a[$i])
Next

afan 发表于 2012-6-14 09:46:32

回复boyhong
也可以这样读, 如果懒得多打一两行代码:
user3000 发表于 2012-6-14 09:10 http://www.autoitx.com/images/common/back.gif


    这个文件没有 BOM 标识,默认会以 ANSI 格式读取到错误的数据,所以这样是不行的。
页: [1]
查看完整版本: [已解决]一个log文件无法一行行读取出来