Сколько строк данных в текстовом файле - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в Powerbuilder, и здесь у меня возник вопрос о том, как найти количество строк / строк данных в текстовом файле. Сначала я попробовал подход FileLength, но не мог понять, как это сделать с моей текущей логикой. Не могу найти ни одного примера того, как это сделать, поэтому здесь мне нужна помощь!

Я создаю пароль из текстового файла.

Примечания: gsa_wordlist - глобальная переменная.

Также, если вы, как опытный разработчик, видите какие-либо распространенные ошибки, пожалуйста, сообщите.

Мой код при нажатии ():

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

Ответы [ 3 ]

1 голос
/ 17 марта 2019

Вам не нужно знать, сколько строк, просто цикл до 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!

0 голосов
/ 11 июня 2019

Генерация пароля из текстового файла - довольно плохая идея. на самом деле вы полагаетесь на символы при генерации пароля и никогда не выбираете полные слова из файла. Файл, содержащий много слов, используется при восстановлении забытого пароля. Также слово, которое имеет смысл или имеет значение при использовании в качестве пароля, обязательно является слабым паролем.

Если у вас есть возможность увидеть панель управления некоторых провайдеров услуг веб-хостинга, вы можете найти там хороший пример сгенерированного надежного пароля (не все провайдеры веб-хостинга предоставляют это).

Но очень легко создать программу, которая делает то же самое. например, следующий скрипт 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"
0 голосов
/ 10 июня 2019

Можете ли вы придумать причину, по которой не следует использовать хранилище данных?

Было бы легко импортировать слова в хранилище данных, и тогда вам сразу же будут доступны методы поиска, сортировки, вставки, удаления.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
...