Visar inlägg med etikett perl. Visa alla inlägg
Visar inlägg med etikett perl. Visa alla inlägg

lördag 14 maj 2011

Normalisering av Unicode

Det förträffliga programmet iconv stöder inte konvertering mellan olika normaliseringsformer, såsom (det också förträffliga programmet) convmv gör.

Det jag vill göra är att konvertera en text från unicode normaliseringsform D (mac os x) till normaliseringsform C (resten av världen:-). Det lättaste är att öppna filen i en texteditor och ta spara som, men det här är något jag ska göra i ett script så jag vill ha ett ickeinteraktivt program.

Lite undersökning av möjligheterna i perl pekar i riktningen Normalize. Perl är hyfsat väldefinierat vad gäller teckenkodning till skillnad från php som är besvärligt eftersom det inte brytt sig om teckenkodning förrän på senare tid. Tyvärr får jag inte Normalize att fungera som avsett!

Som tur är gav mig källkoden till convmv (som är skrivet i perl) en bra hint i en kommentar i texten. Vid närmare läsning visar det sig att det är lite si och så med buggigheten i perl vad gäller dessa funktioner. Eftersom jag kör lite olika perlversioner här och var tröttnar jag och vänder mig till php istället.
Såhär ser det ut på mac os x (med macports version av php, efter att ha installerat php5-intl via macports) (reservation för att vissa tecken äts upp av bloggeditorn)
#!/opt/local/bin/php
$fp = fopen('php://stdin', 'r');
while($str=fgets($fp)) {
echo Normalizer::normalize( $str, Normalizer::FORM_C );
}
?>

Anledningen till att jag håller på med det här är att jag håller på att utarbeta ett system för att synkronisera bildorganiseringsprogram mellan flera datorer. Mac använder normaliseringsform D så det blir problem när filnamn inte stämmer.

torsdag 22 januari 2009

Skapa excelfiler i perl

use Spreadsheet::WriteExcel;
Den här perlmodulen går att använda för att skapa excelark. Jag är ingen varm anhängare av hemliga format (xls), men just nu har jag ett uppdrag som ska levereras i detta format. Innehållet i arket genererar jag med ett annat program.

Modulen har många bra exempel och funktioner.

Läs mer på http://search.cpan.org/dist/Spreadsheet-WriteExcel/

Modulen går att installera i debian (och ubuntu) med
apt-get install libspreadsheet-writeexcel-perl

torsdag 4 oktober 2007

Skapa ett tomt odt-dokument från kommandoraden

Jag vill kunna skapa en file från kommandoraden och sedan redigera den senare.
T ex
touch fil.txt
kate fil.txt

Motsvarande sak med odt-fil (open document, kan öppnas med t ex open office) vill jag ska kunna ske så här ungefär:
touch fil.odt
ooffice fil.odt

men det går inte eftersom fil.odt är tom och jag får varningar och felmeddelanden.
Lite arbete med google ger mig följande:
(tack http://www.livejournal.com/doc/server/lj.install.perl_setup.modules.html)

Installera OpenOffice::OODoc
som root, starta CPAN-skalet:
# perl -MCPAN -e shell
uppgradera cpan:
cpan> install Bundle::CPAN
kör sen:
cpan> reload cpan


sen är det dags för det jag egentligen ville:
cpan> install OpenOffice::OODoc
nu är jag klar och kan från en annan terminal som vanlig användare köra
oobuild tomt_dokument.ods --opendocument
som jag sedan kan öppna med openoffice:
ooffice tomt_dokument.ods

Jag använder debian testing men detta bör fungera på även andra distributioner.

torsdag 11 januari 2007

Konstiga åäö i filnamn

Jag har gamla filer skapade med annan charset än utf-8. Det får till följd att åäö visas som väldigt konstiga tecken.
Det är jobbigt att byta namn på dem manuellt, så jag gjorde ett perlscript här.
Kan vara bra att titta på om du behöver konvertera mellan olika teckenrepresentation.

Efter att jag var klar hittade jag (naturligtvis...) ett färdigskrivet program som fanns i debian från början. (apt-get install convmv)

Mina filer var skapade i iso-8859-1 och jag vill ha utf-8 (smart grej, för övrig)
i katalogrot ligger alla mina filer med inkorrekt namn.
convmv -r -i -f iso-8859-1 -t utf-8 --notest katalogrot