Что нового

Чтение и запись одного файла.

Gzzk

Новичок
Сообщения
104
Репутация
1
Здравствуйте.
Есть такой код:
Код:
#include <Array.au3>
$BaseRead = FileOpen("base.txt", 0)
$BaseWrite = FileWrite("base.txt", 1)
$sMask="HS9Bx";x-цифра,n-буква
$buf=StringRegExp($sMask,"([a-z-]{1,1})",3)
$arr=StringSplit($sMask,$buf[0])
$sMask=$arr[1]
$sCode=""
$sCode&=$sMask
$Flag=1
$Letters=StringRegExp("ABCDEFGHKMNPRSTVWXZUY","([A-Z]{1,1})",3)
While 1
	For $i=0 To UBound($buf)-1
		If Not StringCompare($buf[$i],'x') Then
			$sCode&=Random(2,9,1)
		ElseIf Not StringCompare($buf[$i],'n') Then
			$sCode&=$Letters[Random(0,UBound($Letters)-1,1)]
		ElseIf Not StringCompare($buf[$i],'-') Then
			$sCode&='-'
		EndIf
	Next
	ConsoleWrite($sCode)
	While 1
		$line=FileReadLine($BaseRead)
		If @error = -1 Then ExitLoop
		If Not StringCompare($sCode,$line) Then
			$Flag=0;неуникальный код
		Else
			$Flag=1;уникальный код
		EndIf
	WEnd
	If $Flag=1 Then
		FileWrite($BaseWrite,$sCode&@CRLF)
		ExitLoop
	EndIf
WEnd
FileClose($BaseRead)
FileClose($BaseWrite)

Он генерирует код по маске,сверяет с базой,если там такой уже есть-генерирует новый,если такого ещё нету - записывает в базу.
Однако,вместо записи кода - записывает "1".
Из-за чего это может быть?
Заранее благодарен за ответы.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Gzzk [?]
Из-за чего это может быть?
Некорректное использование дескриптора файла. Исправляем:
Строка 2: меняем 0 на 1 (открытие с добавлением в конец)
Строка 3: комментируем (лишняя)
Строка 33: меняем $BaseWrite на $BaseRead
Строка 38: комментируем (лишняя)

OffTopic:
Ваш алгоритм не найдёт уникального кода, т.к. $Flag будет выставлен по результату сравнения последней строки (сейчас у вас последняя строка всегда пустая).
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
А как можно поправить работу алгоритма?Попробовал сделать так:
Код:
;...
If Not StringCompare($sCode,$line) Then
			$Flag=0;неуникальный код
			ExitLoop
;...

Но не работает.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Gzzk [?]
как можно поправить
Код:
$BaseFile = FileOpen("base.txt", 1)
$sMask="HS9Bx";x-цифра,n-буква
$buf=StringRegExp($sMask,"([a-z-]{1,1})",3)
$arr=StringSplit($sMask,$buf[0])
$sMask=$arr[1]
$sCode=""
$sCode&=$sMask
$Flag=1;уникальный код
$Letters=StringRegExp("ABCDEFGHKMNPRSTVWXZUY","([A-Z]{1,1})",3)

For $i=0 To UBound($buf)-1
    If Not StringCompare($buf[$i],'x') Then
        $sCode&=Random(2,9,1)
    ElseIf Not StringCompare($buf[$i],'n') Then
        $sCode&=$Letters[Random(0,UBound($Letters)-1,1)]
    ElseIf Not StringCompare($buf[$i],'-') Then
        $sCode&='-'
    EndIf
Next
ConsoleWrite($sCode & @CRLF)

FileSetPos($BaseFile, 0, 0)
While 1
    $line=FileReadLine($BaseFile)
    If @error = -1 Then ExitLoop
    If Not StringCompare($sCode,$line) Then
        $Flag=0;неуникальный код
        ExitLoop
    EndIf
WEnd
If $Flag=1 Then FileWrite($BaseFile,$sCode&@CRLF)

FileClose($BaseFile)
 
Верх