Что нового

Неполная запись данных в файл (из цикла)

o_nix

Чайник
Сообщения
35
Репутация
1
Столкнулся с непоняткой в AutoIT

Написан скрипт
Код:
#Include <File.au3>
;Файл с именами
$name_file = FileOpen("name.txt", 0)
; Проверка наличия файла
If $name_file = -1 Then
    MsgBox(0, "Error name.txt", "Файл с именами отсутствует.")
    Exit
EndIf

;Файл с фамилиями
$fname_file = FileOpen("fname.txt", 0)
; Проверка наличия файла
If $name_file = -1 Then
    MsgBox(0, "Error fname.txt", "Файл с фамилиями отсутствует.")
    Exit
EndIf

;Вывод статистики
$kolln=_FileCountLines("name.txt")
$kollf=_FileCountLines("fname.txt")
$max_var = $kolln*$kollf
MsgBox(0, "Исходные данные и статистика:","Имён:" & $kolln & @CRLF & "Фамилий:" & $kollf & @CRLF & "Вариантов:" & $max_var)

;Генеритрование данных
For $i = 1000 to 1 Step -1

;Случайное имя
$ni= Random(1, $kolln, 1)  ; Случайный номер строки
$name = FileReadLine ($name_file, $ni)

;Случайная фамилия
$fi= Random(1, $kollf, 1)  ; Случайный номер строки
$fname = FileReadLine ($fname_file, $fi)

;Запись результатов
$out_file = FileOpen("out_data.txt", 1)
FileWriteLine($out_file, $name & ";" & $fname & @CRLF)
Next


fname.txt и name.txt содержат много строк скрипт делался для генерации случайных комбинаций из строк двух файлов.

На выходе в out_data.txt получается только 507 строчек почему не требуемых 1000 я непонимаю...

Веть явно указано выполнять цикл 1000 раз For $i = 1000 to 1 Step -1 - o_O
Подскажите пожалуйста почему это происходит и как выйти из ситуации??
Спасибо
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
1. А где окончание цикла? Next ;)
2. Random ведь может и повторяться :smile:
А можно эти 2 текстовых файла?
 
Автор
O

o_nix

Чайник
Сообщения
35
Репутация
1
Next конечноже был в скрипте нескопипастил я его тк он далеко внизу (ниже всё закомментировано)...

Random - он на то и рандом чтобы повторяться - целью является получение n колличества записей в выходном файле ... уникальность в принципе несильно интерисует хотя и охватить все возможные варианты тоже непомешалобы.

Как таковых правильных исходных файлов нет пробовал на след.

fname.txt
Код:
первая
вторая
третья
четвёртая
name.txt
Код:
11
22
33
44
55
66
77
88
99
00
99999999999
01
02
03
04
05
06
07
08
09
010
Только сдаётся мне какие именно данные будут в файлах неважно .. здесь загвоздка толи в размере буфера толи фрейма толи ещё чтото подобного ...

Недумал что столкнусь с подобным ... специально веть нехотел на php писать хотелось exe :D
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
For $i = 1000 to 1 Step -1
;...
$out_file = FileOpen("out_data.txt", 1)
;...
Next

Судя по всему, AutoIt не может открыть более 509 файлов одновременно.
Выход из ситуации: открывать файл для записи только один раз. Либо закрывать его каждый раз при выходе из цикла.
 
Автор
O

o_nix

Чайник
Сообщения
35
Репутация
1
SyDr - точно ... :smile: оно самое просто забыл об этом :smile:
ПОМОГЛО
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 159
Репутация
2 329
SyDr [?]
открывать файл для записи только один раз
Это не требуется при записи используя FileOpen(..., 1), хотя так будет быстрее и меньше ресурсов потреблять.

Либо закрывать его каждый раз при выходе из цикла
Тогда это тоже самое что использовать FileWriteLine("file", ...) ;)

P.S
o_nix
В справке сказано, что FileOpen следует закрывать (FileClose), вот и последствия игнорирования законов природы... документаций AutoIt ;).
 

SyDr

Сидра
Сообщения
651
Репутация
158
CreatoR [?]
Это не требуется при записи используя FileOpen(..., 1), хотя так будет быстрее и меньше ресурсов потреблять.
Что-то не понял эту фразу >_<
 
Верх