Strona 1 z 1

[+] Zmiana tablicy znaków na podstawie tablicy znaków

: 22 lutego 2011, 09:22
autor: lo53r
Witam serdecznie.

Napotkałem problem podczas tworzenia skryptu służącego za obsługę TTS w mojej centrali telefonicznej. Problem jest moim zdaniem natury błahej dla osoby znającej powłokę basha dłużej. Chciałbym zadeklarować dwie tablice, w których bym umieścił znaki, które mają być zamienione oraz znaki na co wcześniej znaleziony znak ma być zamieniony.
W PHP skrypt wygląda tak:

Kod: Zaznacz cały

<?php
    $tekst='to jest przykladowy tekst, ktory zawiera znak2, a takze znak3';
    $tablica01 = array('znak1', 'znak2', 'znak3');
    $tablica02 = array('litera1', 'litera2', 'litera3');
    $tekstPoprawiony = str_replace($tablica01, $tablica02, $tekst);
    echo $tekst.'
'.$tekstPoprawiony
?>
Wywołanie takiego skryptu przynosi poniższy efekt:

Kod: Zaznacz cały

to jest przykladowy tekst, ktory zawiera znak2, a takze znak3
to jest przykladowy tekst, ktory zawiera litera2, a takze litera3
Czy za pomocą narzędzi oferowanych przez powłokę bash jest możliwe osiągnięcie takiego efektu?

: 22 lutego 2011, 20:10
autor: grzesiek

Kod: Zaznacz cały

array1=( a1 b1 c1 d1 )
array2=( A1 B1 C1 D1 )

text="aaaa  a1 bbbb  cccc c1"
echo ${text}
n=${#array1[@]}

for ((i = 0;i<n;i++))
do
	text=$(echo -n "$text" |  sed "s/${array1[$i]}/${array2[$i]}/g")
done
echo -n "$text"
Osobiście nie używam bash-a ale skoro trzeba to trzeba, głupkowato to wygląda ale działa:

Kod: Zaznacz cały

grzesiek@home:~$ ./test.sh 
aaaa a1 bbbb cccc c1
aaaa  A1 bbbb  cccc C1grzesiek@home:~$ 

: 23 lutego 2011, 08:33
autor: lo53r
Dziękuję. Faktycznie działa. Potrzebuję jeszcze wiedzieć jak w bashu opisać znaki utf8 w kodzie hex. Ponieważ. mam coś takiego:

Kod: Zaznacz cały

array1=( ą ć ę ł ń ó ś ź ż Ą Ć Ę Ł Ń Ó Ś Ź Ż )
array2=( %C4%85 %C4%87 %C4%99 %C5%82 %C5%84 %C3%B3 %C5%9B %C5%BA %C5%BC %C4%84 %C4%86 %C4%98 %C5%81 %C5%83 %C3%93 %C5%9A %C5%B9 %C5%BB )
i nie chce mi zamieniać liter, a dostaje wszystko w UTF8.

Edycja:
Rozwiązanie.

Kod: Zaznacz cały

array1=( \xC4\x85 \xC4\x87 \xC4\x99 \xC5\x82 \xC5\x84 \xC3\xB3 \xC5\x9B \xC5\xBA \xC5\xBC \xC4\x84 \xC4\x86 \xC4\x98 \xC5\x81 \xC5\x83 \xC3\x93 \xC5\x9A \xC5\xB9 \xC5\xBB )
    array2=( %C4%85 %C4%87 %C4%99 %C5%82 %C5%84 %C3%B3 %C5%9B %C5%BA %C5%BC %C4%84 %C4%86 %C4%98 %C5%81 %C5%83 %C3%93 %C5%9A %C5%B9 %C5%BB )

: 23 lutego 2011, 08:38
autor: mariaczi
Musisz zmieniać te znaki ręcznie? Jeśli wiesz w jakim kodowaniu je dostajesz i wiesz w jakim kodowaniu ostatecznie potrzebujesz, to może skorzystaj z

Kod: Zaznacz cały

iconv

: 23 lutego 2011, 08:48
autor: lo53r
Widzisz, aktualnie tworzę centralkę telefoniczną w oparciu o TTS-a Google. Jednak potrzebowałem zamienić znaki diakrytyczne na coś bardziej zrozumiałego dla ich systemu. Stąd to całe zamieszanie. Niemniej, problem rozwiązałem i dziękuje serdecznie wszystkim za pomoc.