Что нового

[Данные, строки] Перекодировать символы в файле "\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 714
{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
Репутация
964
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
Репутация
964
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
Репутация
622
ol1o
для обрамления кода есть две кнопки над полем набора сообщений. они лучше подходят, нежели тег цитирования. выглядят они вот так
- AutoIt
- любые другие ЯП
 
Верх