Что нового

SQLite, iPhone, побайтовое чтение

merlin333

Новичок
Сообщения
6
Репутация
2
Всем здравствуйте!

приведу цитату с другого форума:smile:
Приветствую всех!

Имеется SQLite 3 база контактов из iphone 3gs, в любом SQLite браузере данных не видно (ФИО и телефоны), но при открытии в текстовом документе - контакты ЕСТЬ в теле файла... проблема в том что ФИО отдельно, Номера отдельно

Как восстановить бы данные? - или привести в соответствие ФИО - Телефон

п.с. iTunes скотина все контакты потер, восстанавливаю
в руках имеется инфа из нескольких бекапов iTunes, из которых телефоны и вытаскиваю, на всякий случай хочу сделать сейчас слив базы напрямую с iphone

ЗАранее всем спасибо!

Перебираю побайтово весь файл ищу ФИО и телефоны.... в принципе уже все нахожу... останеца потом разобраться с линками - какая фамилия кому соответствует

есть у кого информация по этому поводу? длина в байтах стандарты.... расположение

Заранее спасибо за любую помощь!

п.с. сделал експеримент - над подопытным АйФоном
В пустой книге сделал запсиь, заполнил поля, сохранил все
После этого вытащил телефонную книжку.... а в ней один хрен старые записи торчат

Осталось решить только один вопрос - ФИО и телефоны.... но эта информация ни разу не идет последовательно! Как происходит линк? какой одиннаковый байтовый код нужен?

Имеется вот такой код (ВТОРЫЕ СУТКИ ПОЧТИ БЕЗ СНА ПРИЧЕСЫВАТЬ КОД НЕ СТАЛ. ИЗВИНИТЕ ЗАРАНЕЕ:smile:)
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

;;;;		инициализация переменных
Global $res = ""
Global $pos = 0
Global $info[1024]
Global $infoN[1024]
Global $supTmpStr = ""
Global $dctRu [2][1]
Global $dctDig [2][1]

#include <Array.au3>
#Include <GuiEdit.au3>

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=k:\form1.kxf
$Form1_1 = GUICreate("Form1", 1227, 455, 251, 291)
$grpDictWork = GUICtrlCreateGroup("Работа со словарем", 8, 8, 185, 105)
$btnReadDict = GUICtrlCreateButton("Считать шаблон словаря", 16, 24, 171, 25)
$btnRead = GUICtrlCreateButton("Анализ файла", 16, 56, 171, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$sbrStatus = _GUICtrlStatusBar_Create($Form1_1)
Dim $sbrStatus_PartsWidth[4] = [700, 820, 920, -1]
_GUICtrlStatusBar_SetParts($sbrStatus, $sbrStatus_PartsWidth)
_GUICtrlStatusBar_SetText($sbrStatus, "Программа для поиска данных в БД Адресной книги iPhone Apple", 0)
_GUICtrlStatusBar_SetText($sbrStatus, "Код символа", 1)
_GUICtrlStatusBar_SetText($sbrStatus, "Символ", 2)
_GUICtrlStatusBar_SetText($sbrStatus, "Позиция", 3)
$edtInfo = GUICtrlCreateEdit("", 200, 16, 481, 377, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$edtInfoN = GUICtrlCreateEdit("", 688, 16, 521, 377, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$edtTmp = GUICtrlCreateEdit("", 8, 120, 185, 273, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $btnReadDict
			WriteDict ()
		
		Case $btnRead
			Panaceya ()
	EndSwitch
WEnd

;;;;		Раздел функций

;;;;		Анализ таблицы
Func Panaceya ()
	;;;;		инициализация переменных
	;Local $dctEn [2][1]
	Local $i = 1		;;;;	Глобальный Счетчик блоков инфы
	Local $q = 1, $w = 1			;;;;		Счетчики в циклах
	;;;;		Грузим Словари символов
	$dctRu = LoadDict (@WorkingDir & "\Dict\RusDict.txt")
	$dctDig = LoadDict (@WorkingDir & "\Dict\DigitDict.txt")
	;$dctEn = LoadDict (@WorkingDir & "\Dict\EnDict.txt")
	;_ArrayDisplay ($dctRu)
	;_ArrayDisplay ($dctDig)
	;_ArrayDisplay ($dctEn)
	
	;Dim $fnmBD = FileOpenDialog ("Необходимо выбрать файл с базой данных телефонов", @WorkingDir & "\", "All (*.*)")
	Dim $fnmBD = @WorkingDir & "\BD\source2.txt"
	$hBD = FileOpen ($fnmBD, 16)
	$hBDn = FileOpen ($fnmBD)
		
	;;;;		ПОЕХАЛИ
	Info ("Идет поиск", 0, 0, 0)
	While 1
		$info[$i] = FileRead ($hBD, 1024)
		$infoN[$i] = FileRead ($hBDn, 1024)
		If @error <> -1 Then
			Info ("Идет поиск", 0, 0, $i)
			;Подрезаем строку спереди - убираем 0х
			$supTmpStr = StringTrimLeft ($info[$i], 2)
			While StringLen ($supTmpStr) > 0
				;;;;		ПЕРЕБОР РУССКОГО АЛФАВИТА
				for $q = 1 to $dctRu[0][0]
					If StringInStr ($supTmpStr, "00") = 1 Then
						ExitLoop
					EndIf
					$pos = StringInStr ($supTmpStr, $dctRu[$q][1])
					;;;;;Если нужный символ не первый - тогда в жопу!
					If  $pos = 1 Then
						$res = $res & $dctRu[$q][0]
						$supTmpStr = StringTrimLeft ($supTmpStr, 4)
						$res = $res & WordComplete ()
						_GUICtrlEdit_SetText ($edttmp, $res & @crlf & _GUICtrlEdit_GetText ($edtTmp))
						$res = ""
						ExitLoop
					EndIf
				Next
				;
				;;;;		ПЕРЕБОР ЦифроСимвольного алфавита
				;for $q = 1 to $dctDig[0][0]
				;	$pos = StringInStr ($supTmpStr, $dctDig[$q][1])
				;	;MsgBox (0, "найдена цифра", $supTmpStr)
				;	;;;;;Если нужный символ не первый - тогда в жопу!
				;	If  $pos = 1 Then
				;		$res = $res & $dctDig[$q][0]
				;		$supTmpStr = StringTrimLeft ($supTmpStr, 1)
				;		MsgBox (0, "найдена цифра", $res)
				;		$res = $res & WordCompleteDig ()
				;		;MsgBox (0, "найдена цифра", $res)
				;		_GUICtrlEdit_SetText ($edtTmp, $res & @CRLF & _GUICtrlEdit_GetText ($edtTmp))
				;		$res = ""
				;		ExitLoop
				;	EndIf
				;Next
				$supTmpStr = StringTrimLeft ($supTmpStr, 1)
			WEnd
			$i = $i +1
		Else
			;MsgBox (64, "Hello", "Поиск завершен")
			ExitLoop
		EndIf
		;MsgBox (64, "Результаты поиска", $res)
	WEnd
EndFunc

;;;;	рекурсия для завершения словая
Func WordComplete ()
	Local $result = ""
	Local $metka = 0
	While 1
		For $w = 1 to $dctRu[0][0]
			$pos = StringInStr ($supTmpStr, $dctRu[$w][1])
			If  $pos = 1 Then
				;MsgBox (64, "Результаты поиска", $supTmpStr)
				$result = $result & $dctRu[$w][0]
				$metka = 1
				$supTmpStr = StringTrimLeft ($supTmpStr, 4)
				ExitLoop
			EndIf
		Next
		If $metka = 1 Then
			$metka = 0
		Else
			ExitLoop
		EndIf
	WEnd
	Return $result
EndFunc

Func WordCompleteDig ()
	Local $result = ""
	Local $metka = 0
	While 1
		For $w = 1 to $dctDig[0][0]
			$pos = StringInStr ($supTmpStr, $dctDig[$w][1])
			If  $pos = 1 Then
				;MsgBox (64, "Результаты поиска", $supTmpStr)
				$result = $result & $dctDig[$w][0]
				$metka = 1
				$supTmpStr = StringTrimLeft ($supTmpStr, 1)
				ExitLoop
			EndIf
		Next
		If $metka = 1 Then
			$metka = 0
		Else
			ExitLoop
		EndIf
	WEnd
	Return $result
EndFunc

Func LoadDict ($fnmDict)
	Local $dctTmp[100][2]
	Local $i = 0
	Local $strTmp
	$hTmp = FileOpen ($fnmDict, 256)
	
	While 1
		$strTmp = FileReadLine ($hTmp)
		If @error <> -1 Then
			$i = $i + 1
			;MsgBox (64, "test", $strTmp)
			$aTemp = StringSplit ($strTmp, "|")
			;_ArrayDisplay ($aTemp)
			$dctTmp[$i][0] = $aTemp[1]
			$dctTmp[$i][1] = $aTemp[2]
		Else
			ReDim $dctTmp[$i+1][2]
			ExitLoop
		EndIf
	WEnd
	
	$dctTmp[0][0] = $i
	;_ArrayDisplay ($dctTmp)
	Return $dctTmp
EndFunc

;;;;		отображение информации
Func Info (Const $msg, Const $scode, Const $code, Const $currentnumber)
	_GUICtrlStatusBar_SetText ($sbrStatus, $msg, 0, 0)
	_GUICtrlStatusBar_SetText ($sbrStatus, $scode, 1, 0)
	_GUICtrlStatusBar_SetText ($sbrStatus, $code, 2, 0)
	_GUICtrlStatusBar_SetText ($sbrStatus, $pos, 3, 0)
	_GUICtrlEdit_SetText ($edtInfo, $info[$currentnumber])
	_GUICtrlEdit_SetText ($edtInfoN, $infoN[$currentnumber])
	GUISetState (@SW_Show)
EndFunc

;;;;		работа со словарем
Func WriteDict ()
	#cs
		Открываем один и тот же файл источника словаря, только один просто
		в режиме на чтение, другой в бинарном режиме. Результат записываем в словарь
		который потом можно будет при старте программы загружать в массив
	#ce
	Local $fnmResFile1 = FileOpenDialog ("Необходимо выбрать файл Алфавита", @WorkingDir & "\alphabet\","All (*.*)")
	Local $fnmResFile2 = $fnmResFile1
	Local $fnmDict1 = FileSaveDialog ("Необходимо выбрать файл словаря", @WorkingDir & "\Dict\","All (*.*)")
	If StringInStr ($fnmDict1, ".txt") = 0 Then
		$fnmDict1 = $fnmDict1 & ".txt"
	EndIf
	$hDict1 = FileOpen ($fnmDict1, 2)
	$hResFile1 = FileOpen ($fnmResFile1)
	$hResFile2 = FileOpen ($fnmResFile2, 16)
	
	While 1
		$strNorm = FileRead ($hResFile1, 1)
		$strBin = FileRead ($hResFile2, 1)
		If @error <> -1 Then
			;MsgBox (64, "Опа", $strNorm & "|" & $strBin)
			$strBin = StringTrimLeft ($strBin, 2)
			FileWriteLine ($hDict1, $strNorm & "|" & $strBin)
		Else
			ExitLoop
		EndIf
	WEnd
	
	FileClose ($hDict1)
	FileClose ($hResFile1)
	FileClose ($hResFile2)
EndFunc

;Func undChar ()
;	ToolTip ("Код - " & $str, 0, 0, "Информация о символе", 1)
;	FileWrite ($fRes, $Char & "|" & $str & ";")
;	Sleep (500)
;EndFunc

;;;;		Код
#cs

Func WriteRes (Const $Char)
	MsgBox (64, "Str", $Char & " - " & $str)
	FileWrite ($fRes, $Char & "|" & $str & ";")
EndFunc
#ce



есть файл - база контактов с айфона, с моим контактом....

Вопрос! если один контакт в принципе ничего сложного.... но что делать если к одной учетке привязано два или более телефонов

Тоесть как по удаленным данным.... привести их в соответствие: ФИО - Телефон, email, второй телефон и т.д

ЗАРАНЕЕ спасибо всем


Добавлено:
Сообщение автоматически объединено:

прикреплю словари:smile:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Насколько я понял браузеры для SQLite ничего не видят в таблицах, т.к. все данные удалены из них, но SQLite не удаляет данные, а помечает байты как свободные для записи (для увеличения производительности) поэтому копать и еще раз копать файлы вручную :smile:

merlin333 [?]
В пустой книге сделал запсиь, заполнил поля, сохранил все После этого вытащил телефонную книжку.... а в ней один ... старые записи торчат
Можно принудительно "затирать" удаленные данные командой vacuum
Код:
#include <SQLite.au3>
_SQLite_Startup()
_SQLite_Open('base.db')
_SQLite_Exec(-1, 'VACUUM;')
_SQLite_Shutdown()
 
Автор
M

merlin333

Новичок
Сообщения
6
Репутация
2
Добрый человек мне просто в ручную вытащил данные:smile: за что ему большое человеческое спасибо:smile:

Если кого заинтересуют наработки (что конечно наврятли, но вдруг), то готов поделится полученным кодом:smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Это чо за безумная портянка? :laugh:


Добавлено:
Сообщение автоматически объединено:

От так надо:
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         Merlin333

 Script Function:
   [email protected]

#ce ----------------------------------------------------------------------------

;;;;      инициализация переменных
Global $res = ""
Global $pos = 0
Global $info[1024]
Global $infoN[1024]
Global $supTmpStr = ""
Global $dctRu [2][1]
Global $dctDig [2][1]

#include <Array.au3>
#Include <GuiEdit.au3>

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=k:\form1.kxf
$Form1_1 = GUICreate("Form1", 1227, 455, 251, 291)
$grpDictWork = GUICtrlCreateGroup("Работа со словарем", 8, 8, 185, 105)
$btnReadDict = GUICtrlCreateButton("Считать шаблон словаря", 16, 24, 171, 25)
$btnRead = GUICtrlCreateButton("Анализ файла", 16, 56, 171, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$sbrStatus = _GUICtrlStatusBar_Create($Form1_1)
Dim $sbrStatus_PartsWidth[4] = [700, 820, 920, -1]
_GUICtrlStatusBar_SetParts($sbrStatus, $sbrStatus_PartsWidth)
_GUICtrlStatusBar_SetText($sbrStatus, "Программа для поиска данных в БД Адресной книги iPhone Apple", 0)
_GUICtrlStatusBar_SetText($sbrStatus, "Код символа", 1)
_GUICtrlStatusBar_SetText($sbrStatus, "Символ", 2)
_GUICtrlStatusBar_SetText($sbrStatus, "Позиция", 3)
$edtInfo = GUICtrlCreateEdit("", 200, 16, 481, 377, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$edtInfoN = GUICtrlCreateEdit("", 688, 16, 521, 377, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$edtTmp = GUICtrlCreateEdit("", 8, 120, 185, 273, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
         
      Case $btnReadDict
         WriteDict ()
      
      Case $btnRead
         Panaceya ()
   EndSwitch
WEnd

;;;;      Раздел функций

;;;;      Анализ таблицы
Func Panaceya ()
   ;;;;      инициализация переменных
   ;Local $dctEn [2][1]
   Local $i = 1      ;;;;   Глобальный Счетчик блоков инфы
   Local $q = 1, $w = 1         ;;;;      Счетчики в циклах
   ;;;;      Грузим Словари символов
   $dctRu = LoadDict (@WorkingDir & "\Dict\RusDict.txt")
   $dctDig = LoadDict (@WorkingDir & "\Dict\DigitDict.txt")
   ;$dctEn = LoadDict (@WorkingDir & "\Dict\EnDict.txt")
   ;_ArrayDisplay ($dctRu)
   ;_ArrayDisplay ($dctDig)
   ;_ArrayDisplay ($dctEn)
   
   Dim $fnmBD = FileOpenDialog ("Необходимо выбрать файл с базой данных телефонов", @WorkingDir & "\", "All (*.*)")
   ;Dim $fnmBD = @WorkingDir & "\BD\source2.txt"
   $hBD = FileOpen ($fnmBD, 16)
   $hBDn = FileOpen ($fnmBD)
      
   ;;;;      ПОЕХАЛИ
   Info ("Идет поиск", 0, 0, 0)
   While 1
      $info[$i] = FileRead ($hBD, 1024)
      $infoN[$i] = FileRead ($hBDn, 1024)
      If @error <> -1 Then
         Info ("Идет поиск", 0, 0, $i)
         ;Подрезаем строку спереди - убираем 0х
         $supTmpStr = StringTrimLeft ($info[$i], 2)
         While StringLen ($supTmpStr) > 0
            If StringInStr ($supTmpStr, "00012B") = 1 Then
;               MsgBox (0, "Нашли начало", $supTmpStr)
               $supTmpStr = StringTrimLeft ($supTmpStr, 4)   
;               MsgBox (0, "Ищем символ", $supTmpStr)
               While 1
                  for $q = 1 to $dctDig[0][0]
                     ;MsgBox (0, "Ищем символ", "Нормальный вид - " & $dctDig[$q][0] & @CRLF & "16 вид - " & $dctDig[$q][1])
                     ;MsgBox (0, "Ищем символ", $supTmpStr)
                     $pos = StringInStr ($supTmpStr, $dctDig[$q][1])
                     $ends = 0
                     ;MsgBox (0, "Ищем символ", $Pos)
                     If $pos = 1 Then
                        ;MsgBox (0, "Нашли символ", $supTmpStr)
                        ;MsgBox (0, "Ищем символ", "Нормальный вид - " & $dctDig[$q][0] & @CRLF & "16 вид - " & $dctDig[$q][1])
                        $res = $Res & $dctDig[$q][0]
                        $ends = 1
                        ExitLoop
                     EndIf
                  Next
                  If $ends = 1 Then
                     $supTmpStr = StringTrimLeft ($supTmpStr, 2)
                  Else
                     ;FileWriteLine ("res.txt", $res)
                     ;MsgBox (0, "Результат", $res)
                     _GUICtrlEdit_AppendText ($edtTmp, $res & @CRLF)
                     $res = ""
                     ExitLoop
                  EndIf
               WEnd
            EndIf
            
            ;;;;      ПЕРЕБОР РУССКОГО АЛФАВИТА
            ;for $q = 1 to $dctRu[0][0]
            ;   If StringInStr ($supTmpStr, "00") = 1 Then
            ;      ExitLoop
            ;   EndIf
            ;   $pos = StringInStr ($supTmpStr, $dctRu[$q][1])
            ;   ;;;;;Если нужный символ не первый - тогда в жопу!
            ;   If  $pos = 1 Then
            ;      $res = $res & $dctRu[$q][0]
            ;      $supTmpStr = StringTrimLeft ($supTmpStr, 4)
            ;      $res = $res & WordComplete ()
            ;      _GUICtrlEdit_SetText ($edttmp, $res & @crlf & _GUICtrlEdit_GetText ($edtTmp))
            ;      $res = ""
            ;      ExitLoop
            ;   EndIf
            ;Next
            ;
            ;;;;      ПЕРЕБОР ЦифроСимвольного алфавита
            ;for $q = 1 to $dctDig[0][0]
            ;   $pos = StringInStr ($supTmpStr, $dctDig[$q][1])
            ;   ;MsgBox (0, "найдена цифра", $supTmpStr)
            ;   ;;;;;Если нужный символ не первый - тогда в жопу!
            ;   If  $pos = 1 Then
            ;      $res = $res & $dctDig[$q][0]
            ;      $supTmpStr = StringTrimLeft ($supTmpStr, 1)
            ;      MsgBox (0, "найдена цифра", $res)
            ;      $res = $res & WordCompleteDig ()
            ;      ;MsgBox (0, "найдена цифра", $res)
            ;      _GUICtrlEdit_SetText ($edtTmp, $res & @CRLF & _GUICtrlEdit_GetText ($edtTmp))
            ;      $res = ""
            ;      ExitLoop
            ;   EndIf
            ;Next
            $supTmpStr = StringTrimLeft ($supTmpStr, 2)
         WEnd
         $i = $i +1
      Else
         ;MsgBox (64, "Hello", "Поиск завершен")
         Info ("Поиск завершен", 0, 0, 0)
         ExitLoop
      EndIf
      ;MsgBox (64, "Результаты поиска", $res)
   WEnd
EndFunc

;;;;   рекурсия для завершения словая
Func WordComplete ()
   Local $result = ""
   Local $metka = 0
   While 1
      For $w = 1 to $dctRu[0][0]
         $pos = StringInStr ($supTmpStr, $dctRu[$w][1])
         If  $pos = 1 Then
            ;MsgBox (64, "Результаты поиска", $supTmpStr)
            $result = $result & $dctRu[$w][0]
            $metka = 1
            $supTmpStr = StringTrimLeft ($supTmpStr, 4)
            ExitLoop
         EndIf
      Next
      If $metka = 1 Then
         $metka = 0
      Else
         ExitLoop
      EndIf
   WEnd
   Return $result
EndFunc

Func WordCompleteDig ()
   Local $result = ""
   Local $metka = 0
   While 1
      For $w = 1 to $dctDig[0][0]
         $pos = StringInStr ($supTmpStr, $dctDig[$w][1])
         If  $pos = 1 Then
            ;MsgBox (64, "Результаты поиска", $supTmpStr)
            $result = $result & $dctDig[$w][0]
            $metka = 1
            $supTmpStr = StringTrimLeft ($supTmpStr, 1)
            ExitLoop
         EndIf
      Next
      If $metka = 1 Then
         $metka = 0
      Else
         ExitLoop
      EndIf
   WEnd
   Return $result
EndFunc

Func LoadDict ($fnmDict)
   Local $dctTmp[100][2]
   Local $i = 0
   Local $strTmp
   $hTmp = FileOpen ($fnmDict, 256)
   
   While 1
      $strTmp = FileReadLine ($hTmp)
      If @error <> -1 Then
         $i = $i + 1
         ;MsgBox (64, "test", $strTmp)
         $aTemp = StringSplit ($strTmp, "|")
         ;_ArrayDisplay ($aTemp)
         $dctTmp[$i][0] = $aTemp[1]
         $dctTmp[$i][1] = $aTemp[2]
      Else
         ReDim $dctTmp[$i+1][2]
         ExitLoop
      EndIf
   WEnd
   
   $dctTmp[0][0] = $i
   ;_ArrayDisplay ($dctTmp)
   Return $dctTmp
EndFunc

;;;;      отображение информации
Func Info (Const $msg, Const $scode, Const $code, Const $currentnumber)
   _GUICtrlStatusBar_SetText ($sbrStatus, $msg, 0, 0)
   _GUICtrlStatusBar_SetText ($sbrStatus, $scode, 1, 0)
   _GUICtrlStatusBar_SetText ($sbrStatus, $code, 2, 0)
   _GUICtrlStatusBar_SetText ($sbrStatus, $pos, 3, 0)
   _GUICtrlEdit_SetText ($edtInfo, $info[$currentnumber])
   _GUICtrlEdit_SetText ($edtInfoN, $infoN[$currentnumber])
   GUISetState (@SW_Show)
EndFunc

;;;;      работа со словарем
Func WriteDict ()
   #cs
      Открываем один и тот же файл источника словаря, только один просто
      в режиме на чтение, другой в бинарном режиме. Результат записываем в словарь
      который потом можно будет при старте программы загружать в массив
   #ce
   Local $fnmResFile1 = FileOpenDialog ("Необходимо выбрать файл Алфавита", @WorkingDir & "\alphabet\","All (*.*)")
   Local $fnmResFile2 = $fnmResFile1
   Local $fnmDict1 = FileSaveDialog ("Необходимо выбрать файл словаря", @WorkingDir & "\Dict\","All (*.*)")
   If StringInStr ($fnmDict1, ".txt") = 0 Then
      $fnmDict1 = $fnmDict1 & ".txt"
   EndIf
   $hDict1 = FileOpen ($fnmDict1, 2)
   $hResFile1 = FileOpen ($fnmResFile1)
   $hResFile2 = FileOpen ($fnmResFile2, 16)
   
   While 1
      $strNorm = FileRead ($hResFile1, 1)
      $strBin = FileRead ($hResFile2, 1)
      If @error <> -1 Then
         ;MsgBox (64, "Опа", $strNorm & "|" & $strBin)
         $strBin = StringTrimLeft ($strBin, 2)
         FileWriteLine ($hDict1, $strNorm & "|" & $strBin)
      Else
         ExitLoop
      EndIf
   WEnd
   
   FileClose ($hDict1)
   FileClose ($hResFile1)
   FileClose ($hResFile2)
EndFunc

;Func undChar ()
;   ToolTip ("Код - " & $str, 0, 0, "Информация о символе", 1)
;   FileWrite ($fRes, $Char & "|" & $str & ";")
;   Sleep (500)
;EndFunc

;;;;      Код
#cs

Func WriteRes (Const $Char)
   MsgBox (64, "Str", $Char & " - " & $str)
   FileWrite ($fRes, $Char & "|" & $str & ";")
EndFunc
#ce
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Такие функции как FileOpenDialog, FileSaveDialog, FileSelectFolder должны проверятся на ошибку иначе при "Отмена" продолжает работать как будто вы выбрали файл.
 
Верх