On Tue, May 25, 1999 at 07:06:23PM +0200, Leopold Toetsch wrote:

> Das Problem ist z.B.
> 9978:Sch�nthal:C:201 ...

Also irgendwas stimmt dann nicht. Denn 09978 ist von Essen (0201) nie im
Leben Cityzone. Vielleicht hast du auch das Skript falsch verstanden:
Ausgegeben werden die Cityzone (<20km) nach C: und die Regionalzone nach R:.
Alles andere ist Fernzone bzw. Deutschland

Vielleicht solltest du ein anderes Tool, als diese Perl-Variante nutzen. Ich
habe vorhin mal sowas in C zusammengehackt.

Das Teil ben�tigt im aktuellen Verzeichnis eine 'Verzonung.dat' und eine
'tarif.dat'. Hauptunterschied zum Perl-Skript ist, das alle in der tarif.dat
vorhandenen Vorwahlen ausgegeben werden. Dies sind n�mlich mehr, als in der
Verzonung.dat! Dort fehlen die Vorwahlen 900x.

-- 
Jochen Erwied     | EMail:   [EMAIL PROTECTED] | Work:  (9-18 CET)
Sauerbruchstr. 17 | Voice (q):    +49-208-3880018 | Voice: +49-2151-7294-24
D-45470 Muelheim  | X.75/V34/FAX: +49-208-3880019 | FAX:   +49-2151-7294-50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stName {
        unsigned short nVorwahl;
        char *szName;
} *pNamen = NULL;
int nNamen = 0;

char *getname(unsigned short nVorwahl)
{
        int i;

        if(!nNamen)
        {
                FILE *fp;
                char szBuffer[512];
                char *cp;
                fp = fopen("Verzonung.dat", "r");
                if(fp == NULL)
                {
                        nNamen = -1;
                        return "";
                }
                
                while(fgets(szBuffer, sizeof(szBuffer), fp) != NULL)
                {
                        pNamen = (struct stName *)realloc(pNamen, (nNamen+1) * 
sizeof(struct stName));
                        cp = strchr(szBuffer, ';');
                        if(cp != NULL)
                        {
                                *cp++= '\0';
                                pNamen[nNamen].nVorwahl = atoi(szBuffer);
                                cp = strchr(cp, ';');
                                if(cp != NULL)
                                {
                                        cp = pNamen[nNamen].szName = strdup(++cp);
                                        while(*cp && *cp != '\n' && *cp != '\r')
                                                cp++;
                                        *cp = '\0';
                                        nNamen++;
                                }
                        }
                }
                fclose(fp);
        }
        
        for(i=0; i<nNamen; i++)
        {
                if(pNamen[i].nVorwahl == nVorwahl)
                        return pNamen[i].szName;
        }
        
        return "unbekannt";
}

int main(int argc, char **argv)
{
        FILE *fp = fopen("vorwahl.dat", "rb");
        unsigned short nAnzahl, nHilf;
        unsigned short nAnzCity, nAnzFern;
        unsigned short *pVorwahlen;
        unsigned long *lOffset;
        int i,j;
        
        if(fp == NULL)
        {
                printf("File not found\n");
                exit(0);
        }
        
        fread(&nAnzahl, sizeof(nAnzahl), 1, fp);
        pVorwahlen = (unsigned short *)malloc(nAnzahl * sizeof(unsigned short));
        lOffset = (unsigned long *)malloc(nAnzahl * sizeof(unsigned long));
        fseek(fp, 3, SEEK_SET);
        fread(lOffset, nAnzahl, sizeof(unsigned long), fp);
        fseek(fp, 3+4*nAnzahl, SEEK_SET);
        fread(pVorwahlen, nAnzahl, sizeof(unsigned short), fp);
        
        for(i=0; i<nAnzahl; i++)
        {
                pVorwahlen[i] += 32768;
                printf("V:%u", pVorwahlen[i]);
                printf(":%s", getname(pVorwahlen[i]));
                fseek(fp, lOffset[i]-1, SEEK_SET);
                fread(&nAnzCity, 1, sizeof(nAnzCity), fp);
                printf(":C:");
                for(j=0; j<nAnzCity; j++)
                {
                        fread(&nHilf, 1, sizeof(nHilf), fp);
                        nHilf += 32768;
                        printf("%s%u", j?",":"", nHilf);
                }
                fread(&nAnzFern, 1, sizeof(nAnzFern), fp);
                printf(":R:");
                for(j=0; j<nAnzFern; j++)
                {
                        fread(&nHilf, 1, sizeof(nHilf), fp);
                        nHilf += 32768;
                        printf("%s%u", j?",":"", nHilf);
                }
                printf("\n");
        }
        
        free(pVorwahlen);
        free(lOffset);
        fclose(fp);
        
        for(i=0; i<nNamen; i++)
                free(pNamen[i].szName);
        free(pNamen);
}

Antwort per Email an