Olen tässä jo jonkin aikaa tehnyt automaatio ohjelmaa, joka keräisi lähdetiedostosta tarvittavat tiedot ja kirjoittaisi ne oikein kohdetiedostoon.
Muuten olen saanut kaikki pelittämään pienen pähkäilyn jälkeen, mutta ääkkösten muuttaminen isoiksi kirjaimiksi ei vain ota onnistuakseen.
Seuraavanlaisella systeemillä olen tätä yrittänyt:
for(x=0;x<=170;x++){ /*Muutetaan kaikki kirjaimet ISOIKSI*/ k=toupper(testi[x]); putc(k,updated); //put line to updated file }
Tiedän että tuon saisi jotenkin toteutettua ascii koodeilla, mutten ole siinäkään onnistunut.
Kaikki apu ja vinkit ovat tarpeen
Lisää ääkkösille erillinen koodi jolla pakotat ne muuttumaan oikein tyyliin:
If testi[x] = "ä" Then k = "Ä"
(kielioppi tietty pielessä mutta ajatus kai selvinnee)
Iso ja pieni kirjain ovat ASCII:ssa 32 merkin päässä toisistaan, eli kun halutaan muuttaa iso kirjain pieneksi, lisätään 32, ja kun pieni isoksi, vähennetään 32. Ääkköset eivät kuulu ASCII:hin, eivätkä ne todennäköisesti noudata käyttämässäsi merkistössä samaa logiikkaa kuin muut kirjaimet, joten niiden muunnoksen joudut koodaamaan erikseen sedän neuvomalla tavalla.
Tuota yritin mutta vika olikin noissa lainausmerkeissä.
Eli näin se pelittää:
If(testi[x] == 'ä') testi[x] = 'Ä';
Joskus sitä ei vaan näe itse noita ratkaisuja.
Tämä näennäisen helppo juttuhan on oikeasti tosi vaikea tehdä oikein. Yksi konsti nyt voi kumminkin olla käyttää C:ssä setlocale
-asetusta. Silloin toupper
ja sen kaverit toimivat paremmin, kunhan vain käyttäjän merkistöt on kunnolla määritelty käyttöympäristössä. Usein näin ei sitten kumminkaan ole ja systeemi voi toimia muutenkin vähän niin ja näin utf-8:n kanssa.
Ympäristöriippuvaa touhu on muutoinkin, jos miettii vaikka että miten saksalainen ß muutetaan uppercaseksi tai mitä touhussa tapahtuu ranskan vokaaleille, joiden päällä on erilaisia täpliä.
Ikioman muunnostaulukon tekeminen voi olla yksinkertaisinta rajoitetuissa pikkujutuissa.
char to_uppercase(char c) { static const char *up = { /* ... */ }; return up[(unsigned char) c]; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.