Basic4ppc - diakritika
Zdravim, prosim o pomoc s nasledujicim.
Prikazem FileWrite ukladam z promenne text obsahujici diakritiku do souboru .csv. Bohuzel po otevreni tohoto .csv jsou znaky s diakritikou nesrozumitelne. Pri nacteni do tabulky (Table1.LoadCSV) se vsak zobrazuji spravne. Z toho .csv potrebuji tisknout.
Predem diky.
Prikazem FileWrite ukladam z promenne text obsahujici diakritiku do souboru .csv. Bohuzel po otevreni tohoto .csv jsou znaky s diakritikou nesrozumitelne. Pri nacteni do tabulky (Table1.LoadCSV) se vsak zobrazuji spravne. Z toho .csv potrebuji tisknout.
Predem diky.
Nesrozumitelne? Zalezi na kodovani souboru - v Pocket PC je vsechno Unicode, ale aplikace mohou ukladat v jinem formatu a pak nejaky viewer/editor,ktery nema podporu pro dane kodovani, zobrazuje paznaky.
Pri ukladani do Unicode je vhodne zapsat na zacatek BOM.
Pri ukladani do Unicode je vhodne zapsat na zacatek BOM.
CSV soubor otevírám na PC v Excelu 2003 a například slovo kancelář zkomolí na [CODE] kancelář
[/CODE]
Kam přesně mám umístit BOM? Ať to dám kamkoliv, tak ihned po spuštění program hlásí chybu.
Díky.
[/CODE]
Kam přesně mám umístit BOM? Ať to dám kamkoliv, tak ihned po spuštění program hlásí chybu.
Díky.
BOM je sekvence bajtu na zacatku souboru, ne text BOM:)
http://en.wikipedia.org/wiki/Byte_Order_Mark
Zapisuje Basic opravdu Unicode?
V Total Commanderu na PC ve vieweru muzete vyzkouset, v jakem kodovani se text zobrazi spravne.
Excel ma myslim nekde v nastavenich moznost vybrat encoding oteviraneho souboru ne?
http://en.wikipedia.org/wiki/Byte_Order_Mark
Zapisuje Basic opravdu Unicode?
V Total Commanderu na PC ve vieweru muzete vyzkouset, v jakem kodovani se text zobrazi spravne.
Excel ma myslim nekde v nastavenich moznost vybrat encoding oteviraneho souboru ne?
No jo no.:) Jsem začátečník a abych řekl pravdu, tak v tomhle se úplně ztrácím. Basic4ppc by měl defaultně používat Unicode Aspoň se o tom zmiňují v návodu. V excelu jsem tu volbu nenašel. Když soubor otevřu v HEXA, tak na začátku je následující:
[CODE]31 32 2F[/CODE]
Nevím jestli to dobře chápu. Mám to přidat takto?
[CODE]
a = "EF BB BF"
FileOpen(c1,"soubor.csv",cWrite)
WriteByte (a as Byte)
FileClose(c1)
[/CODE]
Díky.
[CODE]31 32 2F[/CODE]
Nevím jestli to dobře chápu. Mám to přidat takto?
[CODE]
a = "EF BB BF"
FileOpen(c1,"soubor.csv",cWrite)
WriteByte (a as Byte)
FileClose(c1)
[/CODE]
Díky.
To je hroze humusacky kod v basicu :), ale takto urcite ze stringu sadu bajtu nezapisete.
Mozna bude lepsi, kdyz kousek vygenerovaeho souvoru sem pripojite a ja se na nej podivam
Mozna bude lepsi, kdyz kousek vygenerovaeho souvoru sem pripojite a ja se na nej podivam
[CODE]
WORD BOM=0xfeff;
DWORD writtenControlBytes;
WriteFile(hFile, &BOM, sizeof(BOM), &writtenControlBytes, NULL);
[/CODE]
Tohle zapisuji v C++. Pokud lze v tom PPCbasicu zadavat hexadecimalni cisla, tak jde o vyjadeni 0xfeff;
Excel ale pry ma problemy s Unicode. Zkusil jste wizard "Import text "? Ten dovoluje nastavit UTF-8 kodovani. Mam Office 2007,, ale ve 2003 je myslim take.
edit: excel 2003 wizarda ma http://www.uwec.edu/help/Excel03/importingdata.htm
WORD BOM=0xfeff;
DWORD writtenControlBytes;
WriteFile(hFile, &BOM, sizeof(BOM), &writtenControlBytes, NULL);
[/CODE]
Tohle zapisuji v C++. Pokud lze v tom PPCbasicu zadavat hexadecimalni cisla, tak jde o vyjadeni 0xfeff;
Excel ale pry ma problemy s Unicode. Zkusil jste wizard "Import text "? Ten dovoluje nastavit UTF-8 kodovani. Mam Office 2007,, ale ve 2003 je myslim take.
edit: excel 2003 wizarda ma http://www.uwec.edu/help/Excel03/importingdata.htm
Tak jsem to vyzkoušel přes ten import v Excelu a pokud zvolím kódování Unicode UTF-8 tak se data zobrazí v pořádku. Co mám teda udělat, aby Basic4ppc toto kódování používal? Ten kód z C++ mě nic neříká :oops:
Soubor vytvářím následovně (a to každý měsíc jiný):
FileOpen (c1, "Soubor.csv", cWrite, ,)
FileClose (c1)
Data ukládám následovně:
FileOpen (c1, "Soubor.csv", cWrite, cAppend)
FileWrite (c1, &data1 "; " &data2 "; " &data3)
FileClose (c1)
Soubor vytvářím následovně (a to každý měsíc jiný):
FileOpen (c1, "Soubor.csv", cWrite, ,)
FileClose (c1)
Data ukládám následovně:
FileOpen (c1, "Soubor.csv", cWrite, cAppend)
FileWrite (c1, &data1 "; " &data2 "; " &data3)
FileClose (c1)
Ted tomu nerozumim - soubor asi bude v UTF-8, kdyz se vam ho podarilo otevrit. Jedine co v sobe nema, je BOM na zacatku - nicmene AFAIK i kdyz BOM pridate, budete muset v Excelu stale jit pres wizarda pro import textu. Excel 2003 utf-8 asi nedetekuje.
Tak to nechápu. Zkontroloval jsem i ostatní vytvorené soubory a tam řetězec EF BB BF je. Že já si vždy vyberu ke kontrole nějakýho zgarba. Nicméně, to nic nemění na tom, že ani ty soubory Excel nezobrazí správně. Ještě jsem vyzkoušel v EF Commanderu příkazy F3 (zobrazení stejně jak v Excelu) a F4, kde se text s diakritikou zobrazí OK.
Předpokládám správně, že je tedy chyba na straně Excelu a že s tím nic neudělám?
Předpokládám správně, že je tedy chyba na straně Excelu a že s tím nic neudělám?
Ale import funguje ne? Jak pisu - Excel jednoduse pri vychozim otevirani souboru (bez importu) ignoruje znakovou sadu.
Import by se dal asi zautomatizovatpres VBA - dalo by se napsat makro a pro toto makro zobrazovat tlacitko v toolbaru/polozku v menu.
Import by se dal asi zautomatizovatpres VBA - dalo by se napsat makro a pro toto makro zobrazovat tlacitko v toolbaru/polozku v menu.
Jo, jo, import funguje, ale je to takovy reseni "Pojd na me z boku" ;). Bohuzel se s tim asi budu muset smirit a nebo to otevirat v textaku.
Diky za Tvou trpelivost a ochotu poradit zacatecnikovi
Diky za Tvou trpelivost a ochotu poradit zacatecnikovi
To je v pohode. ;) To tlaitko v Excelu , ktere by se chovalo jako "Otevrit soubor", ale provedlo by import by ti nestacilo? Z hlediska uzivatele je to primitivni stejne jako puvodni funkce Otevrit soubor.
Anebo - jestlize ten podivny Basic umi volat API, tak bych ti moh vystavit funkci, ktere predas text a ona ho zapise v jine kodove sade. Tohle ale urcite nejdrive nekdy po novem roce. ;)
Anebo - jestlize ten podivny Basic umi volat API, tak bych ti moh vystavit funkci, ktere predas text a ona ho zapise v jine kodove sade. Tohle ale urcite nejdrive nekdy po novem roce. ;)