Что нового

[Данные, строки] Перекодировать символы в файле "\u041f\u0435\u0440\u0432", удалить все "Enter"

ol1o

Новичок
Сообщения
26
Репутация
0
Разобрался.
1. Загрузить файл с инета.
2. передать туда то что нужно.

Проблемы.
1. Перекодировать символы. или как сделать замену по соответствию в файле? - частично решено.
2. как удалить все "Enter" в файле.?


файл который скачивается вложил
код
Код:
_SetListData()
Local $sURL = "http://smotri.n3.ru/services/gc.in?chtype=1"
Local $dl = InetRead($sURL, 2) ; Загружаем всё в переменную
Local $file = FileOpen("test.txt", 2) ; Создаём файл
FileWrite($file, $dl) ; Записываем в него полученные данные с сайта
FileClose($file)

Func _SetListData()
    Local $sFileRead = FileRead("test.txt")
    Local $aList1 = StringRegExp($sFileRead, 'address":"(.*?)","chan', 3)
;    Local $aList1 = StringRegExp($sFileRead, 'address":"(.*?)","chan', 3)
;	Local $aList2 = StringRegExp($sFileRead, 'chans\\/(.*?).png",', 3)
	Local $aList2 = StringRegExp($sFileRead, 'name":"(.*?)","id', 3)

	Local $str = 0
    Local $stroka_1 = '=http://127.0.0.1:12701/Open?filename='
	Local $stroka_2 = '&displayname='
	Local $stroka_3 = '='
    Opt("GUIDataSeparatorChar", "#")
    $file = FileOpen("PCPlayerChannelSelector.ini", 1)

	FileWrite($file, "[Options]" & @CRLF)
	FileWrite($file, "LastChannelID=1" & @CRLF)
	FileWrite($file, "[ChannelListURLs]" & @CRLF)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf
;первая прогонка
    For $i = 0 To UBound($aList1) - 1
		
		$str = $str + 1
        $aSplit_Data = StringSplit($aList1[$i], "#")
        $sData = ""
		If $aSplit_Data[0] = 5 Then ContinueLoop ;It's the header data
			For $j = 1 To $aSplit_Data[0]
				$stroka = $str & $stroka_1 & $aSplit_Data[$j] & $stroka_2 & $str
				FileWrite($file, $stroka & @CRLF)
			Next
		Next
		
;вторая прогонка
	FileWrite($file, "[ChannelListNames]" & @CRLF)
	$str = 0
	For $i = 0 To UBound($aList2) - 1
		$str = $str + 1
        $aSplit_Data = StringSplit($aList2[$i], "#")
        $sData = ""
		If $aSplit_Data[0] = 5 Then ContinueLoop ;It's the header data
			For $j = 1 To $aSplit_Data[0]
				$stroka = $str & $stroka_3 & $aSplit_Data[$j]
				FileWrite($file, $stroka & @CRLF)
			Next
	Next

FileClose($file)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
{CodeWarn.SModer}
 
Автор
O

ol1o

Новичок
Сообщения
26
Репутация
0
по поводу "\u041f\u0435\u0440\u0432"

Символы кириллицы в стандарте Юникода 6.0. но как их преобразовать в русские?

на форумах php про это нашел следующее:
Код:
$escape_table = array(

' ' => '%20',

'!' => '%21',

',' => '%2C',

':' => '%3A',

'' => '%3B',



'А' => '%u0410',

'Б' => '%u0411',

'В' => '%u0412',

'Г' => '%u0413',

'Д' => '%u0414',

'Е' => '%u0415',

'Ё' => '%u0401',

'Ж' => '%u0416',

'З' => '%u0417',

'И' => '%u0418',

'Й' => '%u0419',

'К' => '%u041A',

'Л' => '%u041B',

'М' => '%u041C',

'Н' => '%u041D',

'О' => '%u041E',

'П' => '%u041F',

'Р' => '%u0420',

'С' => '%u0421',

'Т' => '%u0422',

'У' => '%u0423',

'Ф' => '%u0424',

'Х' => '%u0425',

'Ц' => '%u0426',

'Ч' => '%u0427',

'Ш' => '%u0428',

'Щ' => '%u0429',

'Ъ' => '%u042A',

'Ы' => '%u042B',

'Ь' => '%u042C',

'Э' => '%u042D',

'Ю' => '%u042E',

'Я' => '%u042F',



'а' => '%u0430',

'б' => '%u0431',

'в' => '%u0432',

'г' => '%u0433',

'д' => '%u0434',

'е' => '%u0435',

'ё' => '%u0451',

'ж' => '%u0436',

'з' => '%u0437',

'и' => '%u0438',

'й' => '%u0439',

'к' => '%u043A',

'л' => '%u043B',

'м' => '%u043C',

'н' => '%u043D',

'о' => '%u043E',

'п' => '%u043F',

'р' => '%u0440',

'с' => '%u0441',

'т' => '%u0442',

'у' => '%u0443',

'ф' => '%u0444',

'х' => '%u0445',

'ц' => '%u0446',

'ч' => '%u0447',

'ш' => '%u0448',

'щ' => '%u0449',

'ъ' => '%u044A',

'ы' => '%u044B',

'ь' => '%u044C',

'э' => '%u044D',

'ю' => '%u044E',

'я' => '%u044F',

);



function unicode_escape($str)

{

global $escape_table;

return strtr($str, $escape_table);

}





Использование:



<script language='javascript' type='text/javascript'>

var x = '<?=unicode_escape('Привет PHP программистам!');?>'

alert(unescape(x));

</script>
как сделать замену по соответствию в файле?

либо что нибуть придумаю с Encoding_UDF.zip. там как раз есть функция. для преобразования в обратку.

Осталось самое главное удалить все Ентеры в тексте.
Код:
#include <Encoding.au3>

$sString = "\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b"
$sStringToJavaUnicode = _Encoding_JavaUnicodeDecode($sString)
$sJavaUnicodeToString = _Encoding_JavaUnicodeDecode($sStringToJavaUnicode)

MsgBox(64, "Results", $sStringToJavaUnicode)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ol1o [?]
1. Перекодировать символы. или как сделать замену по соответствию в файле?
Код:
$hFile = FileOpen("gc_in2.txt", 0)
$sText = FileRead($hFile)
FileClose($hFile)

_UDecode($sText)
ConsoleWrite($sText & @CRLF)

Func _UDecode(ByRef $sUnicod)
	For $i = 1 To StringLen($sUnicod)
		$sMarker = StringMid($sUnicod, $i, 2)
		If $sMarker = "\u" Then
			$sUnicod = StringReplace($sUnicod, StringMid($sUnicod, $i, 6), ChrW(0 & "x" & StringMid($sUnicod, $i+2, 4)))
		EndIf
	Next
EndFunc


2. как удалить все "Enter" в файле.?
А вы уверенны что "Enter" присутствует?
 
Автор
O

ol1o

Новичок
Сообщения
26
Репутация
0
u0439
\u043a\
да уверен между этими в 1 строчке
u0439 (пробел)(ENTER)
\u043a\
открыл в ворде (кнопка отобразить все знаки)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: [Данные, строки] Перекодировать символы в файле \"\\u041f\\u0435\\u0440\\u0432\", удалить все \

ol1o [?]
u0439 \u043a\да уверен между этими в 1 строчке
Это не "Enter"!!!
Это пробелы! Если вам они мешают: :smile:
Код:
ConsoleWrite(StringStripWS($sText, 8) & @CRLF)



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

Вырезать все значения "перевод каретки" и "новая строка" можно так:
Код:
ConsoleWrite(StringReplace($sText, @CRLF, "") & @CRLF)

Если вы это имели в виду?
 
Автор
O

ol1o

Новичок
Сообщения
26
Репутация
0
Re: [Данные, строки] Перекодировать символы в файле \\\"\\\\u041f\\\\u0435\\\\u0440\\\\u0432\\\", у

Код:
ConsoleWrite(StringStripWS($sText, 8) & @CRLF)

Это помогло. Спасибо. еще пару манипуляций и будет готово.


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

осталось написать условие:
 
Автор
O

ol1o

Новичок
Сообщения
26
Репутация
0
Может быть комму нибуть понадобится целиком или кусок.
Код:
Func _SetListData()
    Local $sFileRead = FileRead("gc_in.txt")
    Local $aList1 = StringRegExp($sFileRead, 'ss":(.*?),"ch', 3)
;    Local $aList1 = StringRegExp($sFileRead, 'address":"(.*?)","chan', 3)
;	Local $aList2 = StringRegExp($sFileRead, 'chans\\/(.*?).png",', 3)
	Local $aList2 = StringRegExp($sFileRead, 'name":"(.*?)",', 3)

 	Local $str = 0
    Local $stroka_1 = '=http://127.0.0.1:12701/Open?filename=udp://'
	Local $stroka_2 = '&displayname='
	Local $stroka_3 = '='
    Opt("GUIDataSeparatorChar", "#")
    $file = FileOpen("PCPlayerChannelSelector.ini", 1)

	FileWrite($file, "[Options]" & @CRLF)
	FileWrite($file, "LastChannelID=1" & @CRLF)
	FileWrite($file, "[ChannelListURLs]" & @CRLF)

If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf
;первая прогонка
    For $i = 0 To UBound($aList1) - 1
		
		$str = $str + 1
        $aSplit_Data = StringSplit($aList1[$i], "#")
        $sData = ""
		If $aSplit_Data[0] = 5 Then ContinueLoop ;It's the header data
			For $j = 1 To $aSplit_Data[0]
				$aSplit_Data[$j] =  $aSplit_Data[$j]
				$xx = StringLeft($aSplit_Data[$j] , 1)
				if $xx = '"' then $aSplit_Data[$j] = StringTrimLeft($aSplit_Data[$j], 1)
				$xx = StringRight($aSplit_Data[$j] , 1)
				if $xx = '"' then $aSplit_Data[$j] = StringTrimRight($aSplit_Data[$j], 1)
				if $aSplit_Data[$j] = 'null' then $aSplit_Data[$j] = '224.0.42.1:5000'
				$stroka = $str & $stroka_1 & $aSplit_Data[$j] & $stroka_2 & $str
				FileWrite($file, $stroka & @CRLF)
			Next
		Next
		
;вторая прогонка
	FileWrite($file, "[ChannelListNames]" & @CRLF)
	$str = 0
	For $i = 0 To UBound($aList2) - 1
		$str = $str + 1
        $aSplit_Data = StringSplit($aList2[$i], "#")
        $sData = ""
		If $aSplit_Data[0] = 5 Then ContinueLoop ;It's the header data
			For $j = 1 To $aSplit_Data[0]
				$stringLeft = StringLeft($aSplit_Data[$j], 3)
	;			FileWrite($file, $stringLeft & '+++++++' )
 ;               if $stringLeft = '\u0' Then $aSplit_Data[$j] = _Encoding_JavaUnicodeDecode($aSplit_Data[$j])
$aSplit_Data[$j] = _Encoding_JavaUnicodeDecode($aSplit_Data[$j])

				$stroka = $str & $stroka_3 & $aSplit_Data[$j]
				FileWrite($file, $stroka & @CRLF)
			Next
	Next

FileClose($file)
EndFunc

Суть такая:
Пульт не работает в программе PC Playr для просмотра IPTV, нашел программу для переключения каналов но туда нужно забивать список каналов. в ручную тяжко забивать и искать 130 каналов да и имена файлов криво отображаются в файле.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ol1o
для обрамления кода есть две кнопки над полем набора сообщений. они лучше подходят, нежели тег цитирования. выглядят они вот так
autoit.gif
- AutoIt
code.gif
- любые другие ЯП
 
Верх