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);
}