如何在C ++中将两个标记设置为一个波浪线分隔的字符串?

时间:2014-05-06 18:38:41

标签: c++ multidimensional-array token delimited-text tilde

我想设置两个令牌,这样每次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:

Array 1-EBOA54_5047734,EBOA54_5045445,EBOA54_5045445,EBOA54_5047939, etc..

Array 2-7-554440039DWG,7-544440304DWG,7-544440303DWG,7-344443445DWG, etc..

我的目的是将DWG编号与另一个格式相同的文件进行比较,以便确定EBO编号是否随时间发生了变化。字符串的长度和起始字符可以随时间变化,因此不能对特定字符进行硬编码。它必须基于分隔符。它可以写入文本文件,就像下面列出的代码试图执行或写入数组一样。如果将其写入数组,那么我不希望将~totdes添加到数组中。

CODE ATTEMPT:

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);
                }

1 个答案:

答案 0 :(得分:0)

我认为你没有这么说,但让我说出我将如何处理它。

我首先看一堆数据。确保您对数据的假设没有例外。

查看数据,我想逐行采取。为了简化操作,请将每一行读入缓冲区,然后使用该缓冲区。

看一行,我可以看到有3个波浪号。 C库提供了几个定位这些函数的函数,所以从获取它们的位置开始。

如果第2和第3波形符号之间只有空格,那么看起来该行没有“DWG”。听起来你忽略了这些界限。

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