0

2 つのトークンを設定して、EBO に DWG があるたびに、両方を配列にロードするか、何らかの区切り記号を使用して両方をテキスト ファイルに書き出すようにします。C++ の場合

サンプルデータ:

1~EBOA54_5047734~7-554440039DWG~
2~EBOA54_5045445~7-544440304DWG~
3~EBOA54_5045445~7-544440303DWG~
4~EBOA54_5047939~7-344443445DWG~
5~EBOA54_5047770~7-454440054DWG~
6~EBOA54_5045048~7-344443484DWG~
7~EBOA54_5045444~7-344440300DWG~
8~EBOA54_5047833~7-553447500DWG~
9~EBOMPS_5040395~~
10~EBOMPS_5040385~~
11~EBOA54_5048008~7-544A44574DWG~
12~EBOMPS_5040387~~
13~EBOMPS_5040394~~
14~EBOMPS_5040394~~
15~EBOMPS_5040395~~
16~EBOMPS_5040487~~
17~EBOA54_5045075~7-444440444DWG~
18~EBOA54_5047748~7-344444043DWG~
19~EBOA54_5047475~7-344450444DWG~
20~EBOMPS_5040404~~
21~EBOMPS_5040397~~
22~EBOMPS_5040375~~
23~EBOMPS_5040383~~
24~EBOMPS_5040404~~
25~EBOMPS_5040403~~
26~EBOMPS_5040444~~
27~EBOMPS_5040378~~
28~EBOMPS_5040444~~
29~EBOMPS_5040398~~
30~EBOMPS_5040447~~
31~EBOA54_5048404~7-344440000DWG~
32~EBOA54_5047954~~
33~EBOA54_5047995~7-344540049DWG~
34~EBOMPS_5040407~~
35~EBOA54_5047845~7-344450440DWG~
36~EBOMPS_5040375~~
37~EBOA54_5047549~7-344534444DWG~
38~EBOA54_5048444~7-544A44408DWG~
39~EBOA54_5048444~7-344444044DWG~
40~EBOMPS_5040448~~
41~EBOMPS_5040444~~
42~EBOA54_5048445~7-544A44598DWG~
43~EBOMPS_5040408~~
44~EBOMPS_5040449~~
45~EBOMPS_5040444~~
46~EBOMPS_5040443~~

可能なサンプル出力 1:

EBOA54_5047734~7-554440039DWG
EBOA54_5045445~7-544440304DWG
等..

考えられるサンプル出力 2:

配列 1-EBOA54_5047734、EBOA54_5045445、EBOA54_5045445、EBOA54_5047939 など。

配列 2-7-554440039DWG、7-544440304DWG、7-544440303DWG、7-344443445DWG など.

私の意図は、DWG 番号を同じ形式の別のファイルと比較して、EBO 番号が時間の経過とともに変化したかどうかを判断できるようにすることです。文字列の長さと開始文字は時間の経過とともに変化する可能性があるため、特定の文字をハードコーディングすることはできません。区切り文字に基づいている必要があります。以下にリストされている私のコードがやろうとしているように、テキストファイルに書き込んだり、配列に書き込んだりすることができます。それが配列に書き込まれる場合、 ~ チルダを配列に追加したくありません。

コード試行:

void extract_xml_ebo_dwg()
{



    int  uu = 0;
    int   j;
    char *y = 0;
    char data_field[25][50];
    char delimiter;

    fgets(Test_line_in, LINESZ, xml_ebo_dwg_file);

        strcpy(testebo_work_line, Test_line_in);
        y=strtok(testebo_work_line, "~");
        j = 0;

        while(y)
        {
            j++;
            if(j==1)
            {
                strcpy (ebo_index, y);
                             }

                y = strtok(NULL,"~");
                if(ebo_index)
                {
                strcpy(line_out, ebo_index);
                printf(ebo_index);
                strcat(line_out,"~");
                fprintf(Testfileout1, line_out);
                }


            if(j==2)
            {
                strcpy (DWG_id, y); 
            }
                y = strtok(NULL,"~");
                if(DWG_id != " ")
                {
                strcpy(line_out, DWG_id);
                printf(DWG_id);
                strcat(line_out, "~");
                fprintf(Testfileout1, line_out);
                }
4

1 に答える 1

0

あなたはこれをうまく表現していないと思いますが、私がどのようにアプローチするかを述べさせてください.

たくさんのデータを見ることから始めます。データに関する仮定に例外がないことを確認してください。

データを見て、行ごとに取りたいと思います。簡単にするために、各行をバッファーに読み込んでから、そのバッファーを操作します。

1 行を見ると、チルダ文字が 3 つあることがわかります。C ライブラリには、これらを見つけるための関数がいくつか用意されているため、まずそれらの位置を取得します。

2 番目と 3 番目のチルダの間に空白しかない場合、その行には「DWG」がないように見えます。そのような行を無視しているように聞こえます。

それ以外の場合は、2 つの文字列値があります。それらは位置を持つチルダの間にあるため、それらがどこにあるかがわかります。この時点でそれらを抽出して、好きなことをするのは非常に簡単です。

于 2014-05-06T20:12:00.580 に答える