文本文件中有多少行数据
How many rows of data in a text file
我是 Powerbuilder 的新手,我有一些关于如何查找文本文件中有多少 rows/lines 数据的问题。首先,我尝试了 FileLength 的一种方法,但无法弄清楚如何使用我当前的逻辑来做到这一点。也找不到任何有关如何使用它的示例,所以在这里我需要一些帮助!
我正在做的是从 txt 文件生成密码。
备注:
gsa_wordlist 是一个全局变量。
此外,如果您作为有经验的开发人员发现任何常见的陷阱,请务必告知。
我在 Click() 上的代码:
int li_rand
int li_upperboundList
int li_FileNum
string ls_fileurl
string ls_listout
int i
li_upperboundList = Upperbound(gsa_wordlist)
ls_fileurl = 'C:\Users\abg\Documents\wordlist.txt'
IF li_upperboundList < 100 THEN
Beep(1)
li_FileNum = FileOpen(ls_fileurl)
FOR i = 1 TO // TO HOW MANY LINES OF DATA
FileReadEx(li_FileNum, ls_listout)
gsa_wordlist[i] = ls_listout
NEXT
li_upperboundList = Upperbound(gsa_wordlist)
li_rand = rand(li_upperboundList)
sle_genpass.Text = string(li_rand)
ELSE
Beep(2)
li_rand = rand(li_upperboundList)
sle_genpass.Text = gsa_wordlist[li_rand]
END IF
不需要知道有多少行,循环到EOF即可。
li_FileNum=FileOpen(ls_fileurl,LineMode!,Read!,LockRead!)
i = 1
DO While FileReadEx(li_FileNum,ls_listout) <> -100
gsa_wordlist[i++] = ls_listout
LOOP
FileClose(li_FileNum)
PS。在循环内添加检查 li_upperboundList
限制 !
您能想到不使用数据存储的任何理由吗?
将单词导入数据存储会很容易,然后您就可以立即使用搜索、排序、插入、删除方法。 ImportFile 也比 ReadFile 快得多。
首先,使用名为 d_dictionary 的外部数据源创建一个数据窗口,其中一列可以容纳您的数据。
然后声明全局变量
datastore gds_dictionary
示例代码
long ll_rows
string ls_fileurl = 'C:\Users\abg\Documents\wordlist.txt'
if not isvalid( gds_dictionary ) then
gds_dictionary = create datastore
gds_dictionary.dataobject = "d_dictionary"
end if
gds_dictionary.reset( )
ll_rows = gds_dictionary.ImportFile( ls_fileurl )
if ll_rows < 1 then
//oops! Something bad happened
else
gds_dictionary.sort( )
end if
以这种方式从文本文件生成密码是个很糟糕的主意。事实上,您在生成密码时依赖于字符,并且从不从文件中选择完整的单词。当您恢复忘记的密码时,会使用一个包含很多单词的文件。如果用作密码,有意义或有意义的词肯定是弱密码。
如果您有机会看到一些网络托管服务提供商的控制面板,那么您可能会在那里找到生成强密码的好例子(并非所有网络托管提供商都提供)。
但是制作一个做同样事情的程序是很容易的。例如下面的 PowerBuilder 脚本就可以做到这一点。
Integer MaxLength = 10, TheNextCode
Integer ASCII_Range[33 TO 125]
String ThePass
DO While Len(ThePass) < MaxLength
TheNextCode = Rand(125)
IF TheNextCode < 33 THEN Continue
ThePass += String(Char(TheNextCode))
LOOP
mle.Text += ThePass + "~r~n"
我是 Powerbuilder 的新手,我有一些关于如何查找文本文件中有多少 rows/lines 数据的问题。首先,我尝试了 FileLength 的一种方法,但无法弄清楚如何使用我当前的逻辑来做到这一点。也找不到任何有关如何使用它的示例,所以在这里我需要一些帮助!
我正在做的是从 txt 文件生成密码。
备注: gsa_wordlist 是一个全局变量。
此外,如果您作为有经验的开发人员发现任何常见的陷阱,请务必告知。
我在 Click() 上的代码:
int li_rand
int li_upperboundList
int li_FileNum
string ls_fileurl
string ls_listout
int i
li_upperboundList = Upperbound(gsa_wordlist)
ls_fileurl = 'C:\Users\abg\Documents\wordlist.txt'
IF li_upperboundList < 100 THEN
Beep(1)
li_FileNum = FileOpen(ls_fileurl)
FOR i = 1 TO // TO HOW MANY LINES OF DATA
FileReadEx(li_FileNum, ls_listout)
gsa_wordlist[i] = ls_listout
NEXT
li_upperboundList = Upperbound(gsa_wordlist)
li_rand = rand(li_upperboundList)
sle_genpass.Text = string(li_rand)
ELSE
Beep(2)
li_rand = rand(li_upperboundList)
sle_genpass.Text = gsa_wordlist[li_rand]
END IF
不需要知道有多少行,循环到EOF即可。
li_FileNum=FileOpen(ls_fileurl,LineMode!,Read!,LockRead!)
i = 1
DO While FileReadEx(li_FileNum,ls_listout) <> -100
gsa_wordlist[i++] = ls_listout
LOOP
FileClose(li_FileNum)
PS。在循环内添加检查 li_upperboundList
限制 !
您能想到不使用数据存储的任何理由吗?
将单词导入数据存储会很容易,然后您就可以立即使用搜索、排序、插入、删除方法。 ImportFile 也比 ReadFile 快得多。
首先,使用名为 d_dictionary 的外部数据源创建一个数据窗口,其中一列可以容纳您的数据。
然后声明全局变量
datastore gds_dictionary
示例代码
long ll_rows
string ls_fileurl = 'C:\Users\abg\Documents\wordlist.txt'
if not isvalid( gds_dictionary ) then
gds_dictionary = create datastore
gds_dictionary.dataobject = "d_dictionary"
end if
gds_dictionary.reset( )
ll_rows = gds_dictionary.ImportFile( ls_fileurl )
if ll_rows < 1 then
//oops! Something bad happened
else
gds_dictionary.sort( )
end if
以这种方式从文本文件生成密码是个很糟糕的主意。事实上,您在生成密码时依赖于字符,并且从不从文件中选择完整的单词。当您恢复忘记的密码时,会使用一个包含很多单词的文件。如果用作密码,有意义或有意义的词肯定是弱密码。
如果您有机会看到一些网络托管服务提供商的控制面板,那么您可能会在那里找到生成强密码的好例子(并非所有网络托管提供商都提供)。
但是制作一个做同样事情的程序是很容易的。例如下面的 PowerBuilder 脚本就可以做到这一点。
Integer MaxLength = 10, TheNextCode
Integer ASCII_Range[33 TO 125]
String ThePass
DO While Len(ThePass) < MaxLength
TheNextCode = Rand(125)
IF TheNextCode < 33 THEN Continue
ThePass += String(Char(TheNextCode))
LOOP
mle.Text += ThePass + "~r~n"