многомерный массив — Как установить два токена на одну строку в C ++, которая разделена тильдой?

Я хочу установить два токена, чтобы каждый раз, когда у 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:

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

0

Решение

Я не думаю, что вы сформулировали это очень хорошо, но позвольте мне сказать, как я к этому подхожу.

Я бы начал с просмотра данных. Убедитесь, что ваши предположения о данных не имеют исключений.

Глядя на данные, я бы хотел взять их построчно. Чтобы упростить задачу, прочитайте каждую строку в буфер, а затем работайте с этим буфером.

Глядя на одну строку, я вижу, что есть 3 символа тильды. Библиотека C предлагает несколько функций для их определения, поэтому начните с определения их местоположения.

Если между 2-й и 3-й тильдой нет ничего, кроме пробела, то похоже, что в этой строке нет «DWG». Похоже, вы игнорируете такие строки.

В противном случае у вас есть два строковых значения. Вы знаете, где они находятся, потому что они падают между тильдами, позиции которых у вас есть. На этом этапе извлекать их и делать с ними все, что угодно, должно быть очень просто.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector