首页 > 解决方案 > 无法使用 sscanf 处理数据

问题描述

我需要遍历一个字符串数据并将其中的值存储在单独的字段中,以便稍后对该数据执行操作。我正在尝试使用 sscanf 来实现这一点,但是在使用 sscanf 时,我在获得所需结果方面遇到了问题。数据没有按要求分开。我认为这可能是一个语法问题,因为我是 C 语言的新手。

我已经尝试通过提供参数和格式来分隔文本来做同样的事情,但它不起作用。

XYZ123 CONFIRMED MT 2019-04-30T13:30:00+02:00 

在上面的字符串中,我需要分隔 XYZ123,第二个我需要 CONFIRMED,第三个 MT 和第四个字段中的其余数据。

sscanf(pMMFk81->or4wnew,"%10[^ ]%c%10[^ ]%c%10[^ ]%c%100[^\0]", 
    szBusField1, space, szBusField2, space1, szBusField3, space2);

代码片段

void AddBsiAttributeSection(PARSED_XML * pXML,
    int ixLevel1,
    OR4WR81 * pMMFk81) {
    int ixLevel2 = 0;
    int ixLevel3 = 0;
    int ixLevel4 = 0;
    char space[10] = "";
    char space1[10] = "";
    char space2[10] = "";
    char szBusField1[10] = "";
    char szBusField2[10] = "";
    char szBusField3[10] = "";
    char szBusField4[10] = "";
    char szData[80 + 1] = "";

    // ----------------------
    // Set up
    //      <xsd:Attribute>
    //          <xsd:Name>BusID</xsd:Name>
    //          <xsd:CurrentValue>
    //              <xsd:STRING>XYZ1234</xsd:STRING>
    //          </xsd:CurrentValue>
    //          <xsd:Attribute>
    // ----------------------

    sscanf(pMMFk81 - > or4wnew, "%10[^ ] %10[^ ] %10[^ ] %100[^\0]", szBusField1, szBusField2, szBusField3, szBusField4);

    ixLevel2 = XML_AddElement(pXML, ixLevel1, FIRXML_NS_XSD, FIRXML_AFEN_Attribute, "");
    XML_AddElement(pXML, ixLevel2, FIRXML_NS_XSD, FIRXML_AFEN_Name, FIRXML_AFEN_BUSID);
    ixLevel3 = XML_AddElement(pXML, ixLevel2, FIRXML_NS_XSD, FIRXML_AFEN_CurrentValue, "");
    //  sprintf (szData,"%6.6s",pASTk80->or4blcc);
    XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_STRING, szBusField1);

    // ----------------------
    // Set up
    //  <xsd:Attribute>
    //      <xsd:Name>Qualifier</xsd:Name>
    //      <xsd:CurrentValue>
    //          <xsd:STRING>ARRIVED_DROPOFF</xsd:STRING>
    //      </xsd:CurrentValue>
    //  </xsd:Attribute>
    // ----------------------

    ixLevel3 = XML_AddElement(pXML, ixLevel2, FIRXML_NS_XSD, FIRXML_AFEN_Attribute, "");
    XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_Name, FIRXML_AFEN_QUALIFIER);
    ixLevel4 = XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_CurrentValue, "");
    //  sprintf (szData,"%3.3s",pStnArr);           // Arrival station
    XML_AddElement(pXML, ixLevel4, FIRXML_NS_XSD, FIRXML_AFEN_STRING, szBusField2);

    // ----------------------
    // Set up
    //  <xsd:Attribute>
    //      <xsd:Name>Source</xsd:Name>
    //      <xsd:CurrentValue>
    //          <xsd:STRING>MT</xsd:STRING>
    //      </xsd:CurrentValue>
    //  </xsd:Attribute>
    // ----------------------

    ixLevel3 = XML_AddElement(pXML, ixLevel2, FIRXML_NS_XSD, FIRXML_AFEN_Attribute, "");
    XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_Name, FIRXML_AFEN_SOURCE);
    ixLevel4 = XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_CurrentValue, "");
    XML_AddElement(pXML, ixLevel4, FIRXML_NS_XSD, FIRXML_AFEN_STRING, szBusField3);

    // ----------------------
    //  <xsd:Attribute>
    //      <xsd:Name>BusTime</xsd:Name>
    //      <xsd:CurrentValue>
    //          <xsd:DATETIME>2019-04-30T13:32:00+01:00</xsd:DATETIME>
    //      </xsd:CurrentValue>
    //  </xsd:Attribute>
    // ----------------------

    ixLevel3 = XML_AddElement(pXML, ixLevel2, FIRXML_NS_XSD, FIRXML_AFEN_Attribute, "");
    XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_Name, FIRXML_AFEN_BUSTIME);
    ixLevel4 = XML_AddElement(pXML, ixLevel3, FIRXML_NS_XSD, FIRXML_AFEN_CurrentValue, "");
    XML_AddElement(pXML, ixLevel4, FIRXML_NS_XSD, FIRXML_AFEN_STRING, szBusField4);

    return;
}

标签: c

解决方案


推荐阅读