-1

ファイルから固定長 (10 文字と 32 文字) の 2 つの可変文字列を取得し、それらを変数として保存して、後でプログラムで渡し、新しいファイルに書き込みたいと考えています。ユーザー入力から新しいファイルにデータを書き込むことはできますが、データを見つけて使用するために保存する方法がわからないため、ユーザーが手動で42文字を入力してエラーのリスクを冒す必要はありません。文字列は内容が異なり、ファイル内の位置も異なる可能性がありますが、常に一定の文字列 "Serial Number =" の後に続きます。刺し傷が始まる既知のオフセット位置がある場合、これにより簡単になりますか? 私は fget または fread を考えていました...しかし、実際の例を得ることができません。

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

int main(void)

{
FILE *f;
FILE * pFile;
char sn[11];
char uuid[33];

  if (f = fopen("test.txt", "rt"))
  {
    fseek (f,443,SEEK_SET);  //file offset location to begin read
    fread(uuid, 1, 32, f);   //Read the data of 32 chars
    uuid[32] = 0;
    fseek (f,501,SEEK_SET);  //file offset location to begin read
    fread(sn, 1, 10, f);     //Read the data of 10 chars
    sn[10] = 0;
    fclose(f);  //Close our file
    printf("The 32 character UUID:\n%s\n", uuid);  //Show read/extracted Data
    printf("The 10 character SN:\n%s\n", sn);      //Show read/extracted Data

    pFile = fopen ("testfile.exe","r+b");   //Open binary file to inject data

    fseek (pFile,24523,SEEK_SET);    //1st file offset location to begin write
    fputs (sn,pFile);                //Write our data!

    fseek (pFile,24582,SEEK_SET);    //2nd file offset location to begin write
    fputs (uuid,pFile);              //Write our data!

    fseek (pFile,24889,SEEK_SET);    //3rd file offset location to begin write
    fputs (uuid,pFile);              //Write our data!

    fclose(pFile);                  //Close our file

    printf ("Finished\n");
    }
return(0);
}

私は週末を通してそれを読んで読みましたが、あるファイルからデータを読み取り、別のファイルに挿入することで、望ましい結果が得られました。これはうまくいきますが、最善の方法ではないかもしれません。携帯電話から送信したため、ソースにアクセスできなかったため、誤ってタグ付けされた投稿について事前にお詫び申し上げます。すべての入力に感謝します。もっと歓迎します。自分が何をしているのかを理解したので、文書化しようとしました。

4

2 に答える 2

0

解決策は機能しますが、文字列の開始位置のオフセットを事前に決定する必要は"test.txt"なく、プログラムにそれらを検索させる方が実用的である場合があります。

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

void find(FILE *f, const char *s)
{   // searches stream f for string s, positions f after s
    int c;
    long offset;
    const char *cp;
    for (; ; )
    for (offset = ftell(f), cp = s; ; ) // save starting point
        if (!*cp) return;   // at end of search string - found
        else
        if ((c = fgetc(f)) == *cp) ++cp;    // character match
        else
        if (c == EOF) printf("\"%s\" not found\n", s), exit(EXIT_FAILURE);
        else
        if (cp > s) { fseek(f, offset, SEEK_SET), fgetc(f); break; }
}

そして交換

    fseek (f,443,SEEK_SET);  //file offset location to begin read

    fseek (f,501,SEEK_SET);  //file offset location to begin read

    find(f, "UUID =");          // really no space after "="?

    find(f, "Serial Number ="); // really no space after "="?

それぞれ。

于 2016-11-07T09:33:37.237 に答える
0

fgetc を使用して、1 つの文字列内の各文字をカウントし、c==" " が別の単語を意味するかどうかを判断してカウントをリセットできます。

于 2013-12-13T23:46:06.620 に答える