c语言解析varchar,c语言解析html

发布时间:2022-12-02

本文目录一览:

  1. c语言如何解析xml并将所有内容存入数组
  2. C语言 格式符解析
  3. 跪求:如何正确地选用数据类型?(C语言)

c语言如何解析xml并将所有内容存入数组

/* 前段时间恰好做过类似的东西,代码可以给你参考下。
* Xml配置见最后
*/
typedef struct SrcFileFmt
{
    int    ColID;
    char   ColCode[64];    /* 字段英文名称 */
    char   ColName[128];   /* 字段中文名称*/
    char   ColType[20];    /* 字段类型(包含长度) */
    char   ColComment[128];/* 字段描述 */
} SrcFileFmt;
int main(int argc, char **argv)
{
    SrcFileFmt SrcFileFmt[128];
    int iNum = -1;
    if (2 < argc)
    {
        printf("Usage: %s SrcXmlFile\n", argv[0]);
        return -1;
    }
    iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt);
    if (iNum == -1)
    {
        return -1;
    }
    return 0;
}
/* 调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmt srcfilefmt[]中
 * 此函数依赖于libxml2-2.9.2.tar.xz
 */
int parseSourceCfg(char *FileName, SrcFileFmt srcfilefmt[])
{ /* 解析源文件xml,FileName 为源xml文件名 */
    xmlDocPtr doc;
    xmlNodePtr cur, root;
    char sFileName[64] = {'\0'};
    int cnt = 0;
    if (FileName == NULL)
    {
        return -1;
    }
    sprintf(sFileName, "%s.xml", FileName);
    doc = xmlParseFile(sFileName);
    if (doc == NULL)
    {
        return -1;
    }
    root = xmlDocGetRootElement(doc);
    if (root == NULL) {
        xmlFreeDoc(doc);
        return(-1);
    }
    if (xmlStrcmp(root->name, (const xmlChar *)"SrcRoot"))
    {
        xmlFreeDoc(doc);
        return -1;
    }
    cur = root->xmlChildrenNode;
    while (cur != NULL)
    {
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"Column")))
        {
            xmlChar *key;
            xmlNodePtr cur_sub = cur;
            cur_sub = cur_sub->xmlChildrenNode;
            while (cur_sub != NULL)
            {
                if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColID"))) {
                    key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
                    killblank((char*)key);
                    srcfilefmt[cnt].ColID = atoi((char*)key);
                    xmlFree(key);
                }
                if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColCode"))) {
                    key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
                    killblank((char*)key);
                    strcpy(srcfilefmt[cnt].ColCode, (char*)key);
                    xmlFree(key);
                }
                else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColName"))) {
                    key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
                    killblank((char*)key);
                    strcpy(srcfilefmt[cnt].ColName, (char*)key);
                    xmlFree(key);
                }
                else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColType"))) {
                    key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
                    killblank((char*)key);
                    strcpy(srcfilefmt[cnt].ColType, (char*)key);
                    xmlFree(key);
                }
                else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColComment"))) {
                    key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
                    killblank((char*)key);
                    strcpy(srcfilefmt[cnt].ColComment, (char*)key);
                    xmlFree(key);
                }
                cur_sub = cur_sub->next;
            }
            cnt++;
        }
        cur = cur->next;
    }
    xmlFreeDoc(doc);
    return cnt;
}

XML 示例

SrcRoot
    Column
        ColID1/ColID
        ColCodekmh/ColCode
        ColName字段1/ColName
        ColTypeVARCHAR(11)/ColType
    /Column
    Column
        ColID2/ColID
        ColCodedfkmh/ColCode
        ColName字段2/ColName
        ColTypeVARCHAR(11)/ColType
    /Column
    Column
        ColID3/ColID
        ColCodehbh/ColCode
        ColName字段3/ColName
        ColTypeINTEGER(10)/ColType
    /Column
/SrcRoot

C语言 格式符解析

printf("a=%4d,b=%6.2f,c=%c,d=%s",12,3.456,'A',"hello");
  • %4d:对应后面第一个数值12,以整型占4个字符打印输出。
  • %6.2f:以实型打印输出,格式输出为占6个字符,打印小数点后两位。四舍五入为3.46。
  • %c:打印字符型。
  • %s:字符串型。

跪求:如何正确地选用数据类型?(C语言)

char 是固定长度字符类型,varchar 是可变长度的字符类型。在检索时 char 列会删除尾部的空格。MyISAM 存储引擎建议使用固定长度的数据列替代可变长度的数据列,MEMORY 存储引擎目前都使用固定长度的数据行存储。InnoDB 存储引擎建议使用 varchar。 保存较大文本时通常会使用 text 或者 blob。二者的差别是 blob 能用来保存二进制数据比如照片,而 text 只能保存字符数据。textblob 值会引起一些性能问题,特别是在执行了大量的删除操作时。可以使用合成的索引来提高大文本字段(BLOB 或 TEXT)的查询性能。

扩展资料:

注意事项:

在 MySQL 中支持的 5 个主要整数类型是 TINYINTSMALLINTMEDIUMINTINTBIGINT。这些类型在很大程度上是相同的,只有存储的值的大小是不相同的。 使用一个宽度指示器不会影响字段的大小和可以存储的值的范围。万一需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围最接近的一端截短后再进行存储。还有一个比较特别的地方是 MySQL 会在不合规定的值插入表前自动修改为 0。 参考资料来源:百度百科-数据类型