qq413774005
发表于 2023-8-22 10:06:04
按你们代码修改了一下
qq413774005
发表于 2023-8-22 10:09:33
qq413774005 发表于 2023-8-22 10:05
正确代码如上。
qq413774005
发表于 2023-8-22 10:13:21
读字符是有字符数量限止,不会无究的。正确脚本如上。
qq413774005
发表于 2023-8-22 10:14:31
chishingchan 发表于 2023-8-20 15:21
64KB 文本文件被限制问题已附代码,请a大帮忙看看,谢谢!
以处理,自己查看
chishingchan
发表于 2023-8-22 13:55:19
qq413774005 发表于 2023-8-22 10:05
第7行 950 是语言代码,并非行数!
_WinAPI_MultiByteToWideChar 这个不能撤!否则读通天也没用!不符合要求!
qq413774005
发表于 2023-8-22 14:08:18
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>
$txtFile = @ScriptDir & "\大于64KB出错.txt"
$txtLang = 9500
$n = 0
;----------------------------------------------------
$Form1 = GUICreate("", 640, 505)
Local $idMyedit = GUICtrlCreateEdit("", 0, 0, 640, 480, $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetLimit($idMyedit, 100000000);解除edit控制限制为1亿字符
;任务栏
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetMinHeight($StatusBar1, 25)
_GUICtrlStatusBar_SetText($StatusBar1, " 【CRC16校验自动生成】 ")
GUISetState(@SW_SHOW)
;-----------------------------------------------------
Local $hFileOpen = FileOpen($txtFile, 0)
;----------------------------
While 1
$line = FileReadLine($hFileOpen)
If @error = -1 Then
FileClose($hFileOpen);文本文件读取异常就关闭
ExitLoop
EndIf
If $n > $txtLang Then
ExitLoop
Else
GUICtrlSetData($idMyedit, $line & @CRLF, 0)
_GUICtrlStatusBar_SetText($StatusBar1, $n & "行")
EndIf
$n = $n + 1
;----------------------------------
WEnd
;----------------------------
FileClose($hFileOpen);文本文件读取异常就关闭
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
能处理啊!没有问题。
chishingchan
发表于 2023-8-22 14:12:55
qq413774005 发表于 2023-8-22 14:08
能处理啊!没有问题。
你的效果达不到!看图:
chishingchan
发表于 2023-8-22 14:16:36
afan 发表于 2023-8-22 09:06
512 是 ANSI
2、3 必须的
4 他这是转换为繁体系统使用的文本(代码页950),所以光靠BinaryToString估计 ...
我的完整代码,大于64KB出错.txt 在1楼附件
#include <WinAPIConv.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;修改这两个变量就好!
$txtFile = @ScriptDir & "\大于64KB出错.txt"
$txtLang = 950
;Locale LCID 16 10 Codepage
;中文(中国) zh-CN 0804 2052 936
;中文(台湾) zh-TW 0404 1028 950
;英语(美国) en_US 0409 1033 437
;日语 ja 0411 1041 932
;朝鲜语 ko 0412 1042 949
Local $hFileOpen = FileOpen($txtFile, $FO_ANSI)
Local $sFileRead = FileRead($hFileOpen) ;, 65536)
FileClose($hFileOpen)
$new = _WinAPI_MultiByteToWideChar($sFileRead, $txtLang, False, True)
GUICreate("多国语言编辑器", 640, 480)
Local $idFilemenu = GUICtrlCreateMenu("文件(&F)")
GUICtrlCreateMenuItem("新建(&N)", $idFilemenu)
Local $idOpensubitem = GUICtrlCreateMenuItem("打开(&O)...", $idFilemenu)
GUICtrlCreateMenuItem("保存(&S)", $idFilemenu)
GUICtrlCreateMenuItem("另存为(&A)...", $idFilemenu)
GUICtrlCreateMenuItem("退出(&F)", $idFilemenu)
Local $idViewmenu = GUICtrlCreateMenu("编码(&E)")
GUICtrlCreateMenuItem("日文(&J)", $idViewmenu)
GUICtrlCreateMenuItem("韩文(&K)", $idViewmenu)
GUICtrlCreateMenuItem("繁体(&T)", $idViewmenu)
GUICtrlCreateMenuItem("简体(&S)", $idViewmenu)
Local $idHelpmenu = GUICtrlCreateMenu("帮助(&H)")
GUICtrlCreateMenuItem("关于(&A)...", $idHelpmenu)
Local $idMyedit = GUICtrlCreateEdit($new, 0, 0, 640, 480)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idOpensubitem
$sFile = FileOpenDialog("选择文件...", @TempDir, "文本文件 (*.txt)")
If @error <> 1 Then GUICtrlSetData($idMyedit, $sFile, 1)
EndSwitch
WEnd
GUIDelete()
chishingchan
发表于 2023-8-22 14:33:48
haijie1223 发表于 2023-8-22 00:30
1、FileOpen的第2个参数512是什么意思,没看到有这个值啊。
2、GUICtrlCreateEdit创建的时候赋值为空,去 ...
发哥,代码图片已更新在 23#,麻烦也看看,指导一下,谢谢!
afan
发表于 2023-8-22 15:50:32
两种方法都跟你说了,始终没有尝试?
chishingchan
发表于 2023-8-22 16:14:41
afan 发表于 2023-8-22 15:50
两种方法都跟你说了,始终没有尝试?
是分段吗?觉得有点复杂。求解决代码,谢谢!
afan
发表于 2023-8-22 16:46:33
chishingchan 发表于 2023-8-22 16:14
是分段吗?觉得有点复杂。求解决代码,谢谢!
两种都可以,看你需求了
chishingchan
发表于 2023-8-22 17:19:34
afan 发表于 2023-8-20 18:05
这就不是 FileRead 读取多少的问题了,而是 MultiByteToWideChar 的问题 (官方也有说明,调用此函数很容易 ...
代入结构是使用 DllStructCreate 吗?
afan
发表于 2023-8-22 18:40:55
chishingchan 发表于 2023-8-22 17:19
代入结构是使用 DllStructCreate 吗?
是的,用 DllStructCreate 创建结构最好是 byte,且先 StringToBinary 将读取到的数据转换下~
haijie1223
发表于 2023-8-22 20:37:50
chishingchan 发表于 2023-8-22 14:33
发哥,代码图片已更新在 23#,麻烦也看看,指导一下,谢谢!
Global $txtFile = @ScriptDir & "\大于64KB出错.txt"
GUICreate("多国语言编辑器", 640, 480)
Local $idFilemenu = GUICtrlCreateMenu("文件(&F)")
GUICtrlCreateMenuItem("新建(&N)", $idFilemenu)
Local $idOpensubitem = GUICtrlCreateMenuItem("打开(&O)...", $idFilemenu)
GUICtrlCreateMenuItem("保存(&S)", $idFilemenu)
GUICtrlCreateMenuItem("另存为(&A)...", $idFilemenu)
GUICtrlCreateMenuItem("退出(&F)", $idFilemenu)
Local $idViewmenu = GUICtrlCreateMenu("编码(&E)")
GUICtrlCreateMenuItem("日文(&J)", $idViewmenu)
GUICtrlCreateMenuItem("韩文(&K)", $idViewmenu)
GUICtrlCreateMenuItem("繁体(&T)", $idViewmenu)
GUICtrlCreateMenuItem("简体(&S)", $idViewmenu)
Local $idHelpmenu = GUICtrlCreateMenu("帮助(&H)")
GUICtrlCreateMenuItem("关于(&A)...", $idHelpmenu)
Local $idMyedit = GUICtrlCreateEdit('', 0, 0, 640, 480)
GUICtrlSetLimit(-1, 999999, 999999)
GUICtrlSetData($idMyedit, _ReadFile($txtFile))
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idOpensubitem
$sFile = FileOpenDialog("选择文件...", @TempDir, "文本文件 (*.txt)")
If @error <> 1 Then
GUICtrlSetData($idMyedit, _ReadFile($sFile), 1)
EndIf
EndSwitch
WEnd
Func _ReadFile($txtFile, $txtLang = 950)
Local $hFile = FileOpen($txtFile, 16)
Local $bData = FileRead($hFile)
FileClose($hFile)
Local $Buffer = DllStructCreate('byte [' & BinaryLen($bData) + 1 & ']')
DllStructSetData($Buffer, 1, $bData)
Return _WinAPI_MultiByteToWideChar($Buffer, $txtLang, False, True)
EndFunc ;==>_ReadFile