学习总结1

<程序设计实践>学习总结

    字符串的处理程序:使用csvgetline函数,它由文件读入一个CSV数据行,将它放入缓冲区,在一个数组里把该行分解为一些数据域,删除引号,最后返回数据域的个数。

    由于CSV数据太复杂不可能简单的用函数scanf做输入剖析,使用C标准库函数strtok.strtokp,s)调用将返回P中的一个标识符的指针,标识符完全由不在S中的字符构成。Strtok将元串里跟在这个字符之后的字符用空字符覆盖,用这种方式表示字符结束。在第一次调用时,strtok的第一个参数应该是原来的字符串,随后的调用都应该用NULL作为第一个参数,指明这次扫描应该从前次调用结束的地方继续下去。

    函数unqutoe的功能是去除像前面例子的数据行里那些表示开头和结束的引号。它并不处理嵌套引号的问题,对于原型而言这样做已足够了。

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

/****************************************************************

/* unqutoe: remove leading and trainingqutoe                  */

**************************************************************/

char *unqutoe(char *p)
{
    if (p[0] == '"')
    {
        if (p[strlen(p) - 1] == '"')
        {
            p[strlen(p) - 1] ='/0';
        }
        p++;
    }
    return p;
}

char buf[200]; //input line buffer;
char *field[20]; //fields

/****************************************************************
/* csvvgetline: read and parse line,returnfield count
    sample input : "LU",67.55,"ASHF","SHGJKH",+34,25  */
***************************************************************/

int csvgetline(FILE *fin)
{
    int nfield;
    char *p,*q;
    if (fgets(buf,sizeof(buf),fin) == NULL)
    {
        return -1;
    }
    nfield = 0;
    for (q = buf; (p=strtok(q,",/n/r"))!= NULL; q = NULL)
    {
        field[nfield++] = unqutoe(p);
    }
    return nfield;
}

int main()
{
    int i , nf;
    while ((nf = csvgetline(stdin)) != -1)
    {
        for (i = 0; i < nf; i++)
        {
            //在printf里用一对单引号起数据域,这起着划清界限的作用,
            //还能发现空格处理不正确这类错误。
            printf("field[%d]= '%s' /n",i,field[i]);
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值