⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read-grs.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* * Copyright (c) 1995-2003, Index Data. * See the file LICENSE for details. * * $Id: read-grs.c,v 1.8 2003/01/06 08:20:29 adam Exp $ *//* * Little toy-thing to read a GRS-1 records from a file. */#include <stdio.h>#include <ctype.h>#include <stdlib.h>#include <yaz/proto.h>#include <yaz/log.h>#define GRS_MAX_FIELDS 50static Z_GenericRecord *read_grs1(FILE *f, ODR o){    char line[512], *buf;    int type, ivalue;    char value[512];    Z_GenericRecord *r = 0;    for (;;)    {	Z_TaggedElement *t;	Z_ElementData *c;	while (fgets(buf = line, 512, f))	{	    while (*buf && isspace(*buf))		buf++;	    if (!*buf || *buf == '#')		continue;	    break;	}	if (*buf == '}')	    return r;	if (sscanf(buf, "(%d,%[^)])", &type, value) != 2)	{	    yaz_log(LOG_WARN, "Bad data in '%s'", buf);	    return 0;	}	if (!type && *value == '0')	    return r;	if (!(buf = strchr(buf, ')')))	    return 0;	buf++;	while (*buf && isspace(*buf))	    buf++;	if (!*buf)	    return 0;	if (!r)	{	    r = (Z_GenericRecord *)odr_malloc(o, sizeof(*r));	    r->elements = (Z_TaggedElement **)                odr_malloc(o, sizeof(Z_TaggedElement*) * GRS_MAX_FIELDS);	    r->num_elements = 0;	}	r->elements[r->num_elements] = t = (Z_TaggedElement *)            odr_malloc(o, sizeof(Z_TaggedElement));	t->tagType = odr_intdup(o, type);	t->tagValue = (Z_StringOrNumeric *)            odr_malloc(o, sizeof(Z_StringOrNumeric));	if ((ivalue = atoi(value)))	{	    t->tagValue->which = Z_StringOrNumeric_numeric;	    t->tagValue->u.numeric = odr_intdup(o, ivalue);	}	else	{	    t->tagValue->which = Z_StringOrNumeric_string;	    t->tagValue->u.string = (char *)odr_malloc(o, strlen(value)+1);	    strcpy(t->tagValue->u.string, value);	}	t->tagOccurrence = 0;	t->metaData = 0;	t->appliedVariant = 0;	t->content = c = (Z_ElementData *)odr_malloc(o, sizeof(Z_ElementData));	if (*buf == '{')	{	    c->which = Z_ElementData_subtree;	    c->u.subtree = read_grs1(f, o);	}	else	{	    c->which = Z_ElementData_string;	    buf[strlen(buf)-1] = '\0';	    c->u.string = odr_strdup(o, buf);	}	r->num_elements++;    }}Z_GenericRecord *dummy_grs_record (int num, ODR o){    FILE *f = fopen("dummy-grs", "r");    char line[512];    Z_GenericRecord *r = 0;    int n;    if (!f)	return 0;    while (fgets(line, 512, f))	if (*line == '#' && sscanf(line, "#%d", &n) == 1 && n == num)	{	    r = read_grs1(f, o);	    break;	}    fclose(f);    return r;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -