Я хочу установить два токена, чтобы каждый раз, когда у 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);
}
Я не думаю, что вы сформулировали это очень хорошо, но позвольте мне сказать, как я к этому подхожу.
Я бы начал с просмотра данных. Убедитесь, что ваши предположения о данных не имеют исключений.
Глядя на данные, я бы хотел взять их построчно. Чтобы упростить задачу, прочитайте каждую строку в буфер, а затем работайте с этим буфером.
Глядя на одну строку, я вижу, что есть 3 символа тильды. Библиотека C предлагает несколько функций для их определения, поэтому начните с определения их местоположения.
Если между 2-й и 3-й тильдой нет ничего, кроме пробела, то похоже, что в этой строке нет «DWG». Похоже, вы игнорируете такие строки.
В противном случае у вас есть два строковых значения. Вы знаете, где они находятся, потому что они падают между тильдами, позиции которых у вас есть. На этом этапе извлекать их и делать с ними все, что угодно, должно быть очень просто.