1

このようなデータを含むファイルがあります

{0 / Data1 /、0x00、0、0xFF}、

{1 / data2 /、0x00、0、0xFF}、

{2 / data3 /、0x00、0、0xFF}、

{3 / data4 /、0x00、0、0xFF}、..。

各行の2列目と最後の列だけを印刷したい。以下は私が取り組んだコードです。その行全体を印刷します。各行の2番目と最後の列のみを印刷するように編集する方法。

#include<stdio.h>

#include<conio.h>

int main ()
{       
    char filename[] = "file.txt"; 

    FILE *file = fopen(filename, "r");

    if(file!= NULL)     
    {                           
        char line[128];                 

        while ( fgets( line, sizeof line, file)!= NULL)
        {                                           
            fputs ( line,stdout);                           
        }                                                       
        fclose(file);                           
    }                                               
    else                    
    {                               
        perror(filename);                   
    }                                           


    getch();                    

    return 0;                       
}        

助けてください!

トンありがとう!

4

2 に答える 2

1

sscanf()でうまくいくはずです。

printf()と同じようにフォーマット文字列を使用し、値を変数に読み込みます。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int a, c, d, e;
    char b[101] = "";
    char filename[] = "file.txt";
    FILE *file = fopen(filename, "r");
    if (file != NULL) {
        char line[128];
        while (fgets(line, sizeof line, file) != NULL) {
            sscanf(line, "{%d %100s , %x, %d, %x}", &a, b, &c, &d, &e);
            printf("%d %X\n", d, e);
        }
        fclose(file);
    } else {
        perror(filename);
    }
    return 0;
}
于 2012-04-16T20:31:28.847 に答える
0

データが次のようにフォーマットされている場合:{0 / Data1 /、0x00、0、0xFF}uはデータ行の最後にある角かっこを検索できます。

例(完全なソリトンではありません)

char data[] = "{0 /Data1/ , 0x00, 0, 0xFF},"

//find the back bracket position

int i=0;
while( i < strlen(data) && data[i]!='}')
 i++;

if(i<strlen(data))
 bracketposition = i;

ワードサイズのブラケット巻き戻しの位置を見つけたら(空白の標準検索でない場合)、この2つの位置(空白の位置とブラケットの位置)の間の値を読み取ります。

于 2012-04-16T19:21:00.573 に答える