我在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;
}
如果你能提出任何方法或帮助我! 感谢
答案 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|
*/