chciałbym przetworzyć je poprzez VBA i dostaję ?????? (ascii 63)
np z tego
StrConv(rst.Fields(1), vbFromUnicode)
lub z
Left(rst.Fields(1), 1)
ma ktoś pomysł jak to zgryźć ?
andrzej
Tzn na czym to przetworzenie ma polegac?
Tekst Unicode na kazdy znak potrzebuje 2 bajtow, musisz o tym pamietac przy
przetwarzaniu.
Cyrylice mozesz wyswietlic tylko w unicode, albo zainstalowac sobie
specjalny narodowy rosyjski zestaw znakow, dostepny np w rosyjskiej wersji
Windows. Jesli usuniesz kodowanie unicode za pomoca:
StrConv(rst.Fields(1), vbFromUnicode)
to tracisz unicode i co za tym idzie cyrylice.
Takze proba wyswietlenia cyrylicy w edytorze VBA nic nie da, bo tam jej nie
ma. Edytor VBA pozwala wyswietlic tylko litery z podstawowego zestawu (i
cale szczescie, jeszcze wymysliliby jakies komendy pisane cyrylica ;-). Ale
co to Ci przeszkadza, przeciez i tak tekst wyswietlac bedziesz pewnie gdzies
na formularzu, a tam unicode jest normalnie obslugiwany nie nie ma problemu
z wpisaniem np rosyjskiego ? .
K.P.
Zlote slowa. Nie zapomne przejscia Excela 4, jak sie nie myle, na 5, kiedy
to zmienili (nie VBA) ale nazewnictwo formul. Czlowiek cale zycie pisal
"IF" i jak tu przejsc na "Jeżeli"? Oj ciezko bylo.
Zycie nabralo innego swiatla, mowiac poetycko;)
jasne :) nie zrozumieliśmy się
po co mi potrzebne ? potrzebuję funkcji która zamieni cyrylicę na zwykly
tekst
czyli np rosyjskie L na angielskie L
cos na ksztalt transkrypcji...na moj prywatny uzytek
parę tysięcy wierszy z tabeli ma być wczytane do gps jako zwykly tekst a nie
cyrylica
masz pomysl jak to zrobic ?
pozdrawiam
andrzej
[...]
>>
>> Cyrylice mozesz wyswietlic tylko w unicode, albo zainstalowac sobie
>> specjalny narodowy rosyjski zestaw znakow, dostepny np w rosyjskiej
>> wersji
>> Windows. Jesli usuniesz kodowanie unicode za pomoca:
>> StrConv(rst.Fields(1), vbFromUnicode)
>> to tracisz unicode i co za tym idzie cyrylice.
>
> jasne :) nie zrozumieliśmy się
> po co mi potrzebne ? potrzebuję funkcji która zamieni cyrylicę na zwykly
> tekst
> czyli np rosyjskie L na angielskie L
> cos na ksztalt transkrypcji...na moj prywatny uzytek
> parę tysięcy wierszy z tabeli ma być wczytane do gps jako zwykly tekst a
> nie
> cyrylica
Załóżmy, ze coś takiego można stworzyć, ale rodzi się pytanie
jak to zrobić programowo. Jak nauczyć program że niektóre rosyjskie
pojedyncze znaki odpowiadają czterem znakom polskim (szcz),
lub dwom (ja, ju) lub są pomijane (twardy znak),
znak zmiękczające itp. kiedy ......
Zróbmy to w najprostszy sposób.
Rozumiem, że jest to jednorazowa operacja. Jeżeli nie, to musisz
to wszystko zoptymalizować, by nie trwało to godzinami.
1. Musimy dysponować dostatecznie długim tekstem zawierającym
wszystkie znaki rosyjskie, lub takowy tekst sobie napisać.
2. Utworzyć tablicę tRusChars z polami:
tChrCode [Long], Index bez duplikatów
tRusChr [Text] długość - 1 znak
tPolChr [Text] długość - 4 znaki
Tworzymy zbiór liter z tekstu zawierającego wszystkie znaki:
'_______________________________________
Private Function zbSlowar(sTextRus As String)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sChrW As String * 1
Dim i As Long
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tRusChars", dbOpenDynaset, dbAppendOnly)
For i = 1 To Len(sTextRus)
' pobieraj kolejne znaki z ciągu wejściowego
Mid$(sChrW, 1, 1) = Mid$(sTextRus, i, 1)
' pomiń błąd powtórzenia klucza
On Error Resume Next
If AscW(sChrW) > 255 Then
With rst
.AddNew
!tChrCode = AscW(sChrW)
!tRusChr = sChrW
.Update
End With
End If
On Error GoTo 0
Next
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Function
Otwieramy tabelę i wpisujemy w pole tPolChr polskie odpowiedniki.
A teraz dokonujemy tłumaczenia tekstu:
'___________________________________________
Private Function zbPieriewiesti(sRuText As String)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sChrW As String * 1
Dim lAscW As Long
Dim i As Long
Dim sOut As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tRusChars", dbOpenTable)
With rst
.Index = "tChrCode"
For i = 1 To Len(sRuText)
' pobieraj kolejne znaki z ciągu wejściowego
Mid$(sChrW, 1, 1) = Mid$(sRuText, i, 1)
lAscW = AscW(sChrW)
If lAscW > 255 Then
.Seek "=", lAscW
If .NoMatch Then
MsgBox "nie ma i tu coś musisz zrobić"
Else
sOut = sOut & Nz(!tPolChr, "-")
End If
Else
sOut = sOut & sChrW
End If
Next
End With
rst.Close
Set rst = Nothing
Set dbs = Nothing
Debug.Print sOut
End Function
Dla większej ilości rekordów rekordset rst załaduj jednorazowo, możesz
utworzyć zamiast rekordsetu kolekcję, może tablicę typu String
o indeksach od min do max tChrCode i wtedy:
sOut = sOut & (JakasTablica( lAscW))
W każdym bądź razie coś mniej więcej takiego.
Na koniec możesz podmienić w polskim "tłumaczeniu"
zbitki znaków typu (ł+miękki znak na l)
łiu - na liu, ale reguły sam musisz sam określić.
--
Pozdrowienia
BraZby
[...]
>>
>> jasne :) nie zrozumieliśmy się
>> po co mi potrzebne ? potrzebuję funkcji która zamieni cyrylicę na zwykly
>> tekst
>> czyli np rosyjskie L na angielskie L
>> cos na ksztalt transkrypcji...na moj prywatny uzytek
>> parę tysięcy wierszy z tabeli ma być wczytane do gps jako zwykly tekst a
>> nie
>> cyrylica
>
> Załóżmy, ze coś takiego można stworzyć, ale rodzi się pytanie
> jak to zrobić programowo. Jak nauczyć program że niektóre rosyjskie
> pojedyncze znaki odpowiadają czterem znakom polskim (szcz),
> lub dwom (ja, ju) lub są pomijane (twardy znak),
> znak zmiękczające itp. kiedy ......
>
> Zróbmy to w najprostszy sposób.
> Rozumiem, że jest to jednorazowa operacja. Jeżeli nie, to musisz
> to wszystko zoptymalizować, by nie trwało to godzinami.
[...]
Oto próbka "tłumaczenia" z rosyjskiego na nasze
Dodałem tylko
sOut = Replace(sOut, "łi", "li", , , vbBinaryCompare)
bo to najbardziej kole w oczy:
sOut = ... w Intiernietie i opros spiecialistow pokazali, czto w
anglijskom jazykie eto ponjatiie traktuietsja nieodnoznaczno: niekotoryie
nazywaiot tak wsieh sotrudnikow IT-otrasli, a drugiie -lnie diełaja
razliczija po otrasłjam -lwsieh, kto obładaiet szirokimi poznanijami w
swoiej sfierie i zanimaietsja tworczieskoj pierierabotkoj informacii.
Wybiraja mieżdu tocznostio i kratkostio, my rieszili ostanowitsja na
"rabotnikah intiełliektuałnogo truda" ("intiełliektuałnyh rabotnikah").
Osnowa wsieh etih izmienienij porazitiełno prosta: eto potok
cifrowoj informacii. My użie liet tridcat żiwiem w informacionnuio eru, no
pokupatieli wsie ieszczie iszczut prodawcow po starinkie, poskołku osnownaja
czast obmiena informaciiej mieżdu kompanijami po-prieżniemu proishodit s
pomoszczio bumażnyh nositieliej. Da, mnogiie ispołzuiot wozmożnosti
informacionnyh tiehnołogij - no lisz dłja kontrołja za osnownymi
opieracijami: uprawlieniiem proizwodstwiennymi sistiemami, sostawlieniiem
sczietow, wiedieniiem buhgałtierskogo uczieta i rasczieta nałogow. Wsie
eto - nie bolieie cziem awtomatizacija staryh prociessow. .....
Jak dla mnie taki "spolszczony" tekst łatwiej sie czyta, niż ten oryginalny
pisany bukwami.
--
Pozdrowienia
BraZby
Mnie by jakoś bardziej pasowało "ch" a nie "h".
> Jak dla mnie taki "spolszczony" tekst łatwiej sie czyta, niż ten
> oryginalny
> pisany bukwami.
Mnie też.
G.
dokładnie o to chodziło :)
wielkie dzięki
"czytelność" takiego tekstu jest troche lepsza, to fakt
dzięki Twojemu kodowi odkryłem AscW, i tego było mi brak, używałem Asc i w
odpowiedzi dostawałem 63
myślałem o użyciu select case w funkcji do zmiany liter
a potem znak po znaku
wielkie dzięki jeszcze raz
pozdr
a.