C 根据行来读取文件 字符串的截取

// TestCFile.cpp : Defines the entry point for the console application.
//
  

#include "stdafx.h"
#include <stdio.h>  
#include <string.h>

char* substr(const char*str,unsigned start, unsigned end);
char * getFirst(char str[]);
char* getValue(char str[]);
void writeAfter(char buffer[]);
void del(char id[]);
char* searchByID(char id[]);

char *path = "/home/magc/software/test1.txt";
char *dest = "D:/123.txt";
char buffer[255];



/*截取字符串*/
char* substr(const char*str,unsigned start, unsigned end)
{
   unsigned n = end - start;
   static char stbuf[256];
   strncpy(stbuf, str + start, n);
   stbuf[n] = 0;
   return stbuf;
}


char * getFirst(char str[])
{    
    int firstComma=strstr(str,",")-str;
    if(firstComma!=-1)//当str中存在,号的时候
    {
        return substr(str,0,firstComma);
    
    }else
    {
        return "nothing was found";
    }

}

/*得到命令中的值     如 add,xxx,x,xx,xx结果是  xxx,x,xx,xx*/
char* getValue(char str[])
{
    int firstComma=strstr(str,",")-str;
    if(firstComma!=-1)//当str中存在,号的时候
    {
        return substr(str,firstComma+1,strlen(str)-1);
    
    }else
    {
        return "values not found";
    }    
}

void writeAfter(char buffer[])
{
    printf("writeAfter");
    FILE *df = fopen(dest,"at");
    if(df!=NULL)
    {
        printf("df is  not null");
        //gets(buffer);//--------buffer来自于控制台的输入
        strcat(buffer,"\n");
        fputs(buffer,df);    
    }
    //fclose(df);
}

/*根据ID来删除*/
/*实际上就是逐行遍历   将不是以此ID开头的都保存起来然后覆盖原文件*/
void del(char id[])
{
    char firstWord[255];
    FILE *df = fopen(dest,"r");
    //存放所有读取的信息的二维字符串数组
    char lines[255][255];
    int lineNo=0;

    char line[255];//一行信息
    while(fgets(line,255,df)!=NULL)
    {
        printf(line);//原本的文件信息中已经带有了换行符号   这里的line也是带有换行符号的//故这里不使用puts
        strcpy(firstWord,getFirst(line));//得到第一个值  例如 本来是001,xxx,xxx,xxx 应该得到001
        
        if(strcmp(firstWord,id)!=0)  //如果该行的id不是我们要找的id 那么 我们应该记住此行
        {
            strcpy(lines[lineNo++],line);
        }else
        {
            //什么也不做
        }
    }
    
    //重新写入文件  覆盖写
    FILE *wf=fopen(dest,"w");
    for(int i=0;i<lineNo;i++)
    {
        fputs(lines[i],wf);

    }


    fclose(df);
    fclose(wf);
}



/*根据ID来查找*/
/*输入 001  找到的结果是 001,xxx,xx,\n         找到的每条信息本身末尾带有\n*/
char* searchByID(char id[])
{
    char firstWord[255];
    FILE *df = fopen(dest,"r");

    char line[255];//一行信息
    while(fgets(line,255,df)!=NULL)
    {
        //printf(line);//原本的文件信息中已经带有了换行符号   这里的line也是带有换行符号的//故这里不使用puts
        strcpy(firstWord,getFirst(line));//得到第一个值  例如 本来是001,xxx,xxx,xxx 应该得到001
        
        if(strcmp(firstWord,id)==0)  //如果该行的id是我们要找的id  找到了!
        {
            break;    
        }else
        {
            //什么也不做    
        }
    }
    fclose(df);
    return line;

}

//int _tmain(int argc, _TCHAR* argv[])
//{
//    //成功运行!
//    //char id[]="003";
//    //del(id);
//
//    /*测试del*/
//    //char str[]="add,xxxx,xxx,xxx";
//    //printf(substr(str,0,3));//正确输出add
//    //strcpy(str,"search,xxxx");
//    //printf(getFirst(str));//正确输出search
//    //strcpy(str,getFirst("001,xxx,xxx,xx"));
//    //printf(str);//正确得到001
//
//
//    /*测试查找*/
//    char str[255];
//    strcpy(str,searchByID("001"));
//    printf(str);
//
//    char c[255];
//    gets(c);
//}

 

posted @ 2013-11-12 11:08  cart55free99  阅读(339)  评论(0编辑  收藏  举报