读取txt文件的内容并遵循C条件

时间:2013-12-11 22:47:52

标签: c file

我在C中使用我的小程序时遇到问题,我想读取一个文件并检查第二行中的字符串,并将该行的字符放入表中,但我必须遵循一些条件< / p>

这是我的txt文件的样子:

  

NOMLOT:500

     

0001 :: 16:27 :: 47 :: 68:79 :: 3 :::: 43:53 :: 71:81 :: 17:28:31 :: 59 ::: 85

我想显示这样的数组 http://i44.tinypic.com/35avekw.jpg

有我的代码,但我知道这不是好方法

int main()
{
int x,i;
char buf[TAILLE];
char tab[60];
FILE* fichier = NULL;
fichier = fopen("LSBBZ.txt", "r");
if (fichier != NULL)
{
printf("%s\n", get_line(buf, TAILLE, fichier, 2));
for (i=0 ; i<60 ;i++)
{
    if( buf[i] == ':' )
    {
        i =i+1;
        if (buf[i] ==':')
        {
            tab[i] = 219 ;
        }
        else
            tab[i] = buf[i];
    }
    else
        tab[i] = buf[i];
}
}
printf("\n");
}

char *get_line(char *buf, int n, FILE *f, int line)
{
int i;
for (i=0 ;i<line;i++)
{
    if(fgets(buf,n,f) == NULL)
        return NULL;
    buf[strlen(buf) - 1 ] = '\0';
}
return buf;
}

如果你能提出任何方法或帮助我! 感谢

1 个答案:

答案 0 :(得分:0)

使用strsep

的示例
#include <stdio.h>
#include <stdlib.h>

#if 1
#include <string.h>

//Not required if already exists.
char * strsep(char **sp, const char *sep)
{
    char *p, *s;
    if (sp == NULL || *sp == NULL || **sp == '\0') return(NULL);
    s = *sp;
    p = s + strcspn(s, sep);
    if (*p != '\0') *p++ = '\0';
    *sp = p;
    return(s);
}
#endif

#define Nothing 219

int main(){
    int data[3][9] = {0};
    char input[] = "0001::16:27::47::68:79::3::::43:53::71:81::17:28:31::59:::85";
    char *token, *sp = input;
    int *ip = &data[0][0];
    token=strsep(&sp, ":");////first drop
    while(NULL != (token=strsep(&sp, ":"))){
        *ip++ = (*token != '\0') ? atoi(token) : Nothing ;//Nothing is 219 
    }
    int r, c;
    for(r=0;r<3;++r){
        printf("|");
        for(c=0;c<9;++c){
            int value = data[r][c];
            if(value != Nothing)
                printf("%2d", data[r][c]);
            else
                printf("%2s", "");
            printf("|");
        }
        printf("\n");
    }
    return 0;
}

/* result
|  |16|27|  |47|  |68|79|  |
| 3|  |  |  |43|53|  |71|81|
|  |17|28|31|  |59|  |  |85|
*/