0

我想设置两个标记,以便每次 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
ETC..

可能的样本输出 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

我认为您的措辞不是很好,但让我说说我将如何处理它。

我将从查看一堆数据开始。确保您对数据的假设没有例外。

查看数据,我想逐行进行。为了简化事情,将每一行读入缓冲区,然后使用该缓冲区。

查看一行,我可以看到有 3 个波浪号字符。C 库提供了几个用于定位它们的函数,因此首先要获取它们的位置。

如果第二个和第三个波浪号之间只有空格,那么看起来该行没有“DWG”。听起来您忽略了这些行。

否则,您有两个字符串值。您知道它们在哪里,因为它们位于波浪线之间,您拥有这些波浪线的位置。在这一点上提取它们并用它们做任何你想做的事情应该是非常简单的。

于 2014-05-06T20:12:00.580 回答