注册 登录
编程论坛 VFP论坛

关于TXT文档内容到DBF表的代码求助

wengjl 发布于 2025-04-27 11:02, 1971 次点击
让EXCEL表数据  进入 到 DBF表的方法是通过创建对象来实现
如;myexcel=CreateObject('excel.application')

观论坛,解决TXT文档到DBF的方法有二种
     
    1、使用FileToStr函数。如:lcFile = FILETOSTR("课务分工2025.TXT") 再通过数组 进入DBF
    2、使用Append From导入。如:APPEND FROM 课务分工2025.txt TYPE DELIMITED WITH TAB


现在我有一个问题,因为公司对电脑装了加密,被保存过的TXT文档,使用filetostr()导入会是一片乱码,所以,想用创建对象打开TXT文档的方法,打开后再读取到DBF中,这个对TXT处理的代码该如何写?烦请高手赐教!

我的问题的简单描述:VFP打开TXT的代码如何写?对打开的文本内容存到变量中,又是如何写代码?
21 回复
#2
星光悠蓝2025-04-27 12:51
我们单位内网电脑也全部安装文控系统,所有文档、图片、PDF文件都会加密,VFP直接打开都会出错,把你的应用程序加入了保护进程后运行正常。
#3
kangss2025-04-27 12:55
以下是引用wengjl在2025-4-27 11:02:56的发言:

让EXCEL表数据  进入 到 DBF表的方法是通过创建对象来实现
如;myexcel=CreateObject('excel.application')

观论坛,解决TXT文档到DBF的方法有二种
     
    1、使用FileToStr函数。如:lcFile = FILETOSTR("课务分工2025.TXT") 再通过数组 进入DBF
    2、使用Append From导入。如:APPEND FROM 课务分工2025.txt TYPE DELIMITED WITH TAB


现在我有一个问题,因为公司对电脑装了加密,被保存过的TXT文档,使用filetostr()导入会是一片乱码,所以,想用创建对象打开TXT文档的方法,打开后再读取到DBF中,这个对TXT处理的代码该如何写?烦请高手赐教!

我的问题的简单描述:VFP打开TXT的代码如何写?对打开的文本内容存到变量中,又是如何写代码?

保存到dbf之前先 STRCONV 15 转成base64,取出使用时再用16解码base64即可
或者用STRCONV 13、14编码解码试试
#4
kangss2025-04-27 13:10
VFP打开TXT的代码如何写?
modi comm c:\aaaa.txt

对打开的文本内容存到变量中,又是如何写代码?
就是你知道的:lcFile = FILETOSTR("课务分工2025.TXT")
#5
wengjl2025-04-27 13:28
以下是引用kangss在2025-4-27 13:10:29的发言:

VFP打开TXT的代码如何写?
modi comm c:\aaaa.txt


试了,打开是一片乱码

用记事本打开才是正常的
#6
my23182025-04-27 15:12
首先你要知道你的电脑是如何加密txt文档的,然后才能考虑下一步。比如,用你的文档控制系统打开,此时可看到正常内容,然后拷贝到剪切板,再读入你vfp系统,再下一步处理。

[此贴子已经被作者于2025-4-27 15:16编辑过]

#7
wengjl2025-04-27 15:15
对WORD加密,通过创建对象,打开WORD再读取,就正常,所以,想到是否也可用创建一个能打开记事本的对象来处理,不知是否可行

#8
xuminxz2025-04-27 17:11
回复 楼主 wengjl
问题没有说清楚啊?没有说清楚是如何加密和解密的。你们如何使用的需要说明。
#9
nbwww2025-04-27 17:27
只要能读出TXT   导入到EXCEL建议用LIBXL 快得你都反应不过来   
#10
kangss2025-04-27 17:55
以下是引用wengjl在2025-4-27 13:28:55的发言:



试了,打开是一片乱码

用记事本打开才是正常的

记事本打开正常 + VFP打开乱码,说明文本格式的码制不是ansi,可能是utf-8等
你需要检查文本的编码格式
#11
kangss2025-04-27 17:56
以下是引用wengjl在2025-4-27 15:15:34的发言:

对WORD加密,通过创建对象,打开WORD再读取,就正常,所以,想到是否也可用创建一个能打开记事本的对象来处理,不知是否可行

绝对不行,word文档怎么能用记事本打开呢?你想想:MP4电影用记事本打开能到到图片吗?
#12
schtg2025-04-28 08:27
回复 楼主 wengjl
试一试下面的代码,可否输出正常的字符串?
程序代码:
clear
local i, h
local array wplines[10]  &&  仅列举前10行
h = fopen("test.txt")
for i = 1 to alen(wplines)
    wplines[i] = fgets(h)
endfor

hzs = alen(wplines)
for i = 1 to hzs
    ? i,wplines[i]
endfor
fclose(h)



[此贴子已经被作者于2025-4-28 08:29编辑过]

#13
wengjl2025-04-28 08:31
首先感谢各位的参与,谢谢!
加密是第三方提供的,所以,根本不知道加密与解密的原理,看到现象是:
一个办公文档(如EXCEL文档、WORD文档、TXT文档)在电脑上操作与不装加密软件的电脑上操作是一样的,但拷贝到家中的电脑上打开就是乱码一片。
从论坛上下载下来一个TXT文档(如:“123.TXT”),只要不去作打开保存的操作,是不会被加密的。那么,

cfile=filetostr("123.txt")
再  
? cfile 观察,在VF窗口看到的内容是正常的
如果 打开保存操作过后,则文档就被加密了,再
cfile=filetostr("123.txt")  
? cfile 观察,在VF窗口看的内容是一片乱码了!

也就是说,保存过后的文档,就不能用 文件到字符 的函数来解决了!

于是,想到一个,像 EXCEL TO DBF 那样的方法:即VF代码创建一个EXCEL对象,用对象打开EXCEL表,再读取EXCEL到DBF那样。
提问就是想要这样一个方法的代码,即 用VF代码创建一个X对象,用这个对象能打开“123.TXT”文件,再全选 - 复制 - 粘贴 到 变量或数组后,最后进入到 DBF 表中。

烦请高手提供帮助,我好学到一种技术!谢谢!
#14
csyx2025-04-28 09:57
右击加密后的 txt,打开方式 > 写字板,如果写字板能正常显示,也许就能用 RichText 对象来读写
只能说也许,说不定加密方式是采用 hook 进程名而不是控件的 ProgId
#15
厨师王德榜2025-04-28 11:04
这样提问解决不了问题,我出个主意,你在这里提供两份txt文件。
文件1.txt,未加密过的,  内容为:
abc...z(回车)
123...9(回车)
ABC...Z(回车)
文件2. (文件1在你公司电脑上保存后的样子)
两份文件都传上来,说不定有高手可以破。
#16
wengjl2025-04-28 12:43
以下是引用厨师王德榜在2025-4-28 11:04:05的发言:

这样提问解决不了问题,我出个主意,你在这里提供两份txt文件。
文件1.txt,未加密过的,  内容为:
abc...z(回车)
123...9(回车)
ABC...Z(回车)
文件2. (文件1在你公司电脑上保存后的样子)
两份文件都传上来,说不定有高手可以破。


只有本站会员才能查看附件,请 登录

二份文件制作好了

供高手测试
#17
wengjl2025-04-28 12:46
我需要的,不是破解,是VF创建对象、打开、读取的方法。

不过能破解,也是一个好玩的东东!
#18
厨师王德榜2025-04-28 14:23
猜测你要的是这个:
程序代码:
* 打开记事本并加载文件(异步模式,不等待)
lcFile = "C:\Intel\调用clssqlite33示例.txt"  && 要打开的文件全路径名称
winTitle = JUSTSTEM(lcFile)  + " - 记事本"   && 推算出的窗口标题
* 创建 WScript.Shell 对象
loShell = CREATEOBJECT("WScript.Shell")
loShell.Run('notepad.exe "' + lcFile + '"', 1, .F.)  && WScript.Shell 对象打开记事本

* 等待记事本窗口启动(关键延迟)
= INKEY(1)  && 延迟1秒,确保窗口加载完成

* 激活记事本窗口(通过窗口标题匹配)
llActivated = loShell.AppActivate(winTitle)
IF NOT llActivated
    MESSAGEBOX("无法激活记事本窗口!")
    RETURN
ENDIF

* 通过发送(Ctrl[color=#808080]+A)和(Ctrl+C),取得记事本内容到剪贴板[/color]
loShell.SendKeys("^a")  && Ctrl+A
= INKEY(0.2)           && 等待200毫秒确保全选完成
loShell.SendKeys("^c")  && Ctrl+C
= INKEY(0.5)           && 等待500毫秒确保复制完成

* 关闭记事本
loShell.SendKeys("%{F4}")  && Alt+F4 关闭窗口
= INKEY(0.5)

* 释放对象
RELEASE loShell

* 验证剪贴板内容
IF !EMPTY(_CLIPTEXT)
    IF MESSAGEBOX("内容已复制到剪贴板,是否输出到屏?" ,4,"读取记事本成功。") = 6
        CLEAR
        nn = ALINES(arrtxt, _CLIPTEXT, 2, CHR(13))
        FOR ir = 1 TO nn
            * 记事本内容输出到屏,也可改为append到一个事先准备好的表中
            ? STR(ir) + "|" + arrtxt[ir]
        ENDFOR  
    ENDIF
ELSE
    MESSAGEBOX("复制失败!")
ENDIF
#19
厨师王德榜2025-04-28 14:26
运行效果:
只有本站会员才能查看附件,请 登录
#20
wengjl2025-04-28 14:46
以下是引用厨师王德榜在2025-4-28 14:23:17的发言:

猜测你要的是这个:
* 打开记事本并加载文件(异步模式,不等待)
lcFile = "C:\Intel\调用clssqlite33示例.txt"  && 要打开的文件全路径名称
winTitle = JUSTSTEM(lcFile)  + " - 记事本"   && 推算出的窗口标题
* 创建 WScript.Shell 对象
loShell = CREATEOBJECT("WScript.Shell")
loShell.Run('notepad.exe "' + lcFile + '"', 1, .F.)  && WScript.Shell 对象打开记事本

* 等待记事本窗口启动(关键延迟)
= INKEY(1)  && 延迟1秒,确保窗口加载完成

* 激活记事本窗口(通过窗口标题匹配)
llActivated = loShell.AppActivate(winTitle)
IF NOT llActivated
    MESSAGEBOX("无法激活记事本窗口!")
    RETURN
ENDIF

* 通过发送(Ctrl+A)和(Ctrl+C),取得记事本内容到剪贴板
loShell.SendKeys("^a")  && Ctrl+A
= INKEY(0.2)           && 等待200毫秒确保全选完成
loShell.SendKeys("^c")  && Ctrl+C
= INKEY(0.5)           && 等待500毫秒确保复制完成

* 关闭记事本
loShell.SendKeys("%{F4}")  && Alt+F4 关闭窗口
= INKEY(0.5)

* 释放对象
RELEASE loShell

* 验证剪贴板内容
IF !EMPTY(_CLIPTEXT)
    IF MESSAGEBOX("内容已复制到剪贴板,是否输出到屏?" ,4,"读取记事本成功。") = 6
        CLEAR
        nn = ALINES(arrtxt, _CLIPTEXT, 2, CHR(13))
        FOR ir = 1 TO nn
            * 记事本内容输出到屏,也可改为append到一个事先准备好的表中
            ? STR(ir) + "|" + arrtxt[ir]
        ENDFOR  
    ENDIF
ELSE
    MESSAGEBOX("复制失败!")
ENDIF

正是需要的,非常感谢!
#21
wengjl2025-04-28 15:11
以下是引用csyx在2025-4-28 09:57:03的发言:

右击加密后的 txt,打开方式 > 写字板,如果写字板能正常显示,也许就能用 RichText 对象来读写
只能说也许,说不定加密方式是采用 hook 进程名而不是控件的 ProgId



不好意思啊!结贴后再看发现没给到您分数,抱歉,真的不好意思啊!
#22
hsfisher2025-05-21 14:22
学习了
1