Oldal: 1 / 1

Egységes telefonszám formátum

Elküldve: 2024. április 1., hétfő 23:23
Szerző: Ambakaj
Sziasztok!
Szeretnék segítséget kérni Calc és Base használatához. Egyelőre a Calc-al bíbelődöm, telefonszám formázásával. A cél az lenne, hogy egy táblázatban a meglévő telefonszámokat azonos formátumra alakítsam. Az elődeim az idők folyamán a legváltozatosabb módokon írták be a telefonszámokat. Hol szövegként, hol számként, de semmiképpen sem egy egységes formátumban. Ezt most szeretném letisztázni és azonos formátumra hozni, majd az egészet átültetni egy adatbázisba.

Most, a teljesség igénye nélkül, így néznek ki a telefonszámok:
06201234567
36201234567
0620 123 4567
06 20 1234567
06 20 123 4567
+36201234567
+3620 123 4567

Ezt szeretném úgy formázni, függetlenül a korábban bevitt formától, ahogy a telefonokon is megjelenik:
+36 20 123 4567

Találtam több formátum kódot is, de egyik sem az igazi.
00 00 000 0000
## ## ### ####
+36 ## ### ####
+36(##)-###-####
+"36-00-000-0000
"+36-00-000-0000
"+"36" "##" "###" "####"

Hogyan lenne kivitelezhető ez a feladat? Milyen formátumkódot kellene megadni?

Re: Egységes telefonszám formátum

Elküldve: 2024. április 2., kedd 11:32
Szerző: Zizi64
Szögezzük le az elején:

A telefonszámok nem numerikus értékek, ezért azokat nem lehet számformázással formázni. (Nem lehetetlen, de sokkal több lesz vele a nyűg, a probléma az ilyen-olyan kivételek kezelése miatt, ami a már bevitt (különböző módon/formában bevitt) értékek miatt keletkezik. És nem pont olyan lesz, mint amilyet te akarsz.) Értelme sincs számként kezelni, mert nem akarsz velük semmilyen számtani műveleteket végezni... Hogy a számábrázolás pontatlanságairól ne is beszéljek: a Calc 15 értékes jegyig pontos; afölött már nem, ott már kerekít, levág, módosítja a bevitt "értéket". Ebbe a magyarországi telefonszámok még beleférnek integer formában, de a külföldiek sok esetben már nem!

A telefonszámok olyan stringek, amelyek főleg számjegy karakterekből, néhány elválasztó karakterből és esetleg egy-két speciális karakterből állnak. Országonként, esetleg azon belül körzetenként más és más az elfogadott "formátum" és a számjegyek száma is.

Emiatt csak az egységes formátumban, és szövegként történő konzekvens bevitel fog igazán elfogadható eredményt adni.

Minden egyéb "javítási kísérlet" eredménye esetleges, csak a makrók, vagy a F&R funkció megfelelő mélységű ismerete (a reguláris kifejezések, illetve a "wilcard" helyettesítő karakterek használatának az ismerete) segíthet rendbe tenni az adatok "formátumát".

Tehát szövegként kezelve ki kell egészíteni, vagy éppen csonkolni kell a stringet, esetleg a közepébe karaktereket beszúrni, karaktert lecserélni (06/36) kell a már bevitt értékeknek - vagy mindezek kombinációit alkalmazni kell -, úgy, hogy meglehetősen nehéz használható szabályt felállítani akár csak az általad példaként megadott telefon"számokra" is: az egyikkel ezt, a másikkal azt és amazt kell csinálni.
Ezt tekintélyes munka elvégzése nélkül nem úszod meg. Vagy nagyon "okos" makrót kell hozzá írnod, vagy kézzel kell megcsinálnod a javítást.

Re: Egységes telefonszám formátum

Elküldve: 2024. április 2., kedd 12:15
Szerző: Zizi64
...de erről - úgy látom - már beszélgettünk veled:

viewtopic.php?p=15889#p15889

Re: Egységes telefonszám formátum

Elküldve: 2024. április 4., csütörtök 7:01
Szerző: Zizi64
...Más szavakkal:
A formátumkóddal, vagy egyéb módon történő formázás NEM VÁLTOZTATJA (és nem változtathatja) meg a SZÁMOK értékét.
Márpedig, ha számként vitték be a
06201234567
36201234567
értékeket, akkor egy formázás NEM ADHAT HOZZÁ numerikusan
30 000 000 000-ot az elsőhöz, csak azért hogy "úgy nézzen ki", mint a második. Ezt soha nem fogja megtenni egy normális táblázatkezelő program. Ki kéne dobni a francba, ha ezt megtenné.

Másrészt a számok vizuális ábrázolásának vannak lokális szabályai (tizedes vessző, tizedespont, ezreselválasztó karakterek, ezrenként történő csoportosítás, stb...) A bevitelkor a számok FELISMERÉSE ezek alapján történik a táblázatkezelő programokban. Mert amíg viszed be a hosszú számot, az mindaddig string marad, amíg az algoritmus fel nem ismeri, hogy "jé, ez egy szám! Akkor ennek nem 0 lesz az ÉRTÉKE!" (A stringeké egyértelműen nulla.)
De az így bevitt cellatartalmat SOHA nem fogja számként értelmezni:
06 20 123 4567, hiszen szóközök vannak benne, és ráadásul nem is hármasával vannak csoportosítva a számok...

Így aztán lehetnek valódi numerikus értékek meg stringek a bevitt listában. Ezek KÜLÖNBÖZŐ adattípusok. Lehetetlen AZONOS MÓDON kezelni azokat. Mindenképpen szükség van egy előzetes konverzióra, mielőtt bármiféle formázást, vagy egységes alakra hozást próbálnánk meg végrehajtani. A string->szám konverzió végrehajtásához meg javításra (karakter törlésre, esetleg beszúrásra, kiegészítésre) lesz szükség, hogy az algoritmusok, cella függvények képesek legyenek számként felismerni a karaktersort.

Remélem érthető, amit írtam... (várnék valamiféle visszajelzést...)