Что нового

[Ошибки] Парсер не умеет "в перекодировку"

akoulev

Новичок
Сообщения
169
Репутация
2
Hi, all!

Есть пока ещё только заготовка парсера: оная заготовка открывает текстовый файл, построчно считывает из него строки и ... поскольку это заготовка, то отображает эти строки -по очереди- на экране. Беда в том, что обрабатывается файл, созданный операционкой => в 866 кодовой странице. АвтоИт же желает видеть строки в 1251 кодировке. Как результат, прилично отображаются строки с английскими словами; русские же слова, разумеется, отображаются "калякой-малякой". Причина ясна — неясно, как победить. От слова "совсем".

Код:
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <Array.au3>
#include <File.au3>

Global $Gde_hran_istok = "C:\tmp\"
Global $istok = "net_user.txt"
Global $stok = "net_user_output.txt"
Global $CountLines = 0; сколько строк? Default = 0
Local $sFilePath = $Gde_hran_istok&$istok
Local $sFilePathOut = $Gde_hran_istok&$stok
Global $hFileOpen = FileOpen($sFilePath, $FO_READ )
Global $Shtirlits = 0

If_are_FILES()

SkokaStrok(); скока строк, файл ИСТОК?

Local $i=1
While 1
	  Global $sFileRead = FileReadLine ($hFileOpen, $i)
		 Local $Tri_levih = StringTrimRight ($sFileRead,StringLen ($sFileRead)-3)
		; MsgBox (0,"***",$Tri_levih ,2)
				 If $Tri_levih = "---" Then
					$Shtirlits =1
				 Else
					; них
				 EndIf

										  MsgBox (0,"XXX","Строка № " & $i & ", её значение: " & $sFileRead ,1.1)
										  If  $Shtirlits =1 Then
											; Writttte()
										  Else
										  EndIf


	  $i=$i+1
	  If $i=$CountLines+1 Then ExitLoop
WEnd
Exit



; Далее идут функции



Func If_are_FILES(); есть ли файлы ИСТОК и СТОК?
	  If $hFileOpen = -1 Then
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the ISTOK-file.")
        Return False
    EndIf

; Open the file for read/write access.
   Global $hFileOpenOut = FileOpen($sFilePathOut, $FO_READ + $FO_APPEND)
   ;Local $hFileOpen    = FileOpen($sFilePath,    $FO_READ + $FO_OVERWRITE)
    If $hFileOpenOut = -1 Then
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading/writing the OUT-file.")
        Return False
    EndIf
EndFunc



Func SkokaStrok(); скока строк, файл ИСТОК? — _FileCountLines
	$CountLines = _FileCountLines($sFilePath)
   If @error Then
	   MsgBox(0, 'Ошибка', 'Не найден файл')
   Else
	   MsgBox(64, "Результат", "В файле net_user.txt всего " & $CountLines & " строк.", 2)
	EndIf
EndFunc



Func Writttte()
   ;$hFileOpen = FileOpen($sFilePathOut, $FO_READ + $FO_OVERWRITE)
  FileWrite($hFileOpenOUT, $sFileRead & @CRLF)
;[optional] Mode to open the file in.
;Can be a combination of the following:
;    $FO_READ (0) = Read mode (default)
;    $FO_APPEND (1) = Write mode (append to end of file)
;    $FO_OVERWRITE (2) = Write mode (erase previous contents)
;    $FO_CREATEPATH (8) = Create directory structure if it doesn't exist (See Remarks).
;    $FO_BINARY (16) = Force binary mode (See Remarks).
;    $FO_UNICODE or $FO_UTF16_LE (32) = Use Unicode UTF16 Little Endian reading and writing mode.
;    $FO_UTF16_BE (64) = Use Unicode UTF16 Big Endian reading and writing mode.
;    $FO_UTF8 (128) = Use Unicode UTF8 (with BOM) reading and writing mode.
;    $FO_UTF8_NOBOM (256) = Use Unicode UTF8 (without BOM) reading and writing mode.
;    $FO_ANSI (512) = Use ANSI reading and writing mode.
;    $FO_UTF16_LE_NOBOM (1024) = Use Unicode UTF16 Little Endian (without BOM) reading and writing mode.
;    $FO_UTF16_BE_NOBOM (2048) = Use Unicode UTF16 Big Endian (without BOM) reading and writing mode.
;    $FO_FULLFILE_DETECT (16384) = When opening for reading and no BOM is present, use the entire file to determine if it is UTF8 or UTF16. If this is not used then only the initial part of the file (up to 64KB) is checked for performance reasons.
;The folder path must already exist (except using $FO_CREATEPATH mode - See Remarks).
;
;Constants are defined in FileConstants.au3.

EndFunc


В каталоге по адресу c:\tmp лежит файл net_user.txt следующего содержимого:
Код:
Учетные записи пользователей для \\Один_комп

-------------------------------------------------------------------------------
ASPNET                   HelpAssistant            SUPPORT_388945a0
Администратор            Гость
Команда выполнена успешно.
D:\Documents and Settings\Один_user


Ай нид хелп, плиз!

PS: "вручную" перевернуть, конечно, можно — но как-то странно, зная о вящей мощи AutoIt! :IL_AutoIt_1:
 

Вложения

  • net_user.txt
    294 байт · Просмотры: 2
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
InnI сказал(а):
Ур-ррр-ра, заработало!
5239045.jpg

Спасибо!
 
Верх