2017-01-03 60 views
0

我想知道給出標題時的列號。如何獲取C++中的列號?

例如爲S Mac Bonded State SIS Qos(DS-US) CPE MAC address IP Address

列1是S,2是Mac,3是Bonded,4是State,5是SIS,6是Qos(DS-US),7是CPE,8是MAC address和9是IP Address

問題是,如果拆分基於空間" ",MAC和地址將被視爲不同的列,這是不正確的。

文件的頭三行我解析

S/C/CH-S/CG/CH Mac Bonded State  SIS Qos(DS-US) CPE MAC address  IP Address 
12/0/18-1/0/0  1  4x4 Operational 3.0 120M/12M  0 000f.c22a.7014 10.135.148.24 
12/0/0-1/0/4  1  4x4 Operational 3.0 120M/12M  0 1121.10fc.3993 10.135.148.50 
12/0/8-1/0/0  1  4x4 Operational 3.0 120M/12M  0 1121.81fc.1234 10.135.148.43 

的列始終在同一位置對齊,所以這可能是一個解決辦法,但我不知道怎麼去的位置。

什麼是解決問題的最佳方法?

+4

莫不是你看不到字段之間標籤? –

+0

你能發佈你想分析的第一個3-4行文件嗎?並且請將其發佈到http://pastebin.com/,以便我們可以逐字查看該文件。 –

+0

不,沒有標籤欄。 – user2314946

回答

0

您可以使用另一個分隔符來分隔列。例如代替空格(" "),可以使用逗號(",")或連字符("-")。我建議使用可能不會用在文件其他地方的東西來避免任何錯誤。

+0

我不能更改數據,我只能解析它 – user2314946

+0

也許你可以使用一些if語句和temp變量來檢查某些標題,假設你事先知道標題將會是什麼。比方說,如果第一個temp輸入變量給你'MAC',並且下一個temp輸入變量給你'Address',那麼你將它們分組成一列。這不是一個優雅的修復,但它可以工作。 – Sphics

+0

但是這不會工作,如果我需要知道IP地址的列號,因爲它將計數2列的MAC地址。 只有當我知道所有標題之前,這纔有效。 – user2314946

0

使用boost::algorithm::split_regex

std::vector<std::string> result; 
std::string str = "S Mac Bonded State  SIS Qos(DS-US) CPE MAC address" 
boost::algorithm::split_regex(result, str, regex(" ")) ; 

如果你想接受多個空格作爲分隔符,只需使用正則表達式"\s{2,}"

+0

我不能使用2個空格,因爲某些列僅由單個空格分隔 – user2314946

+1

在這種情況下,無法區分單個空格是列分隔符還是列名的一部分。考慮改變分隔符,如其他建議。 – pSoLT

0

你應該做的基於列的位置分割。

的第一項開始於第1列,並在塔18結束時,第二項開始於柱19及在柱25等結束

做一分爲兩個階段:

第1階段:

分割線基於列的位置,這將給你:

  • "12/0/18-1/0/0 "
  • "1 "
  • "4x4 "
  • "Operational "
  • "3.0 "
  • "120M/12M "
  • "0 "
  • "000f.c22a.7014"
  • "10.135.148.24"

階段2:

地帶TRA iling空間,這將導致:

  • "12/0/18-1/0/0"
  • "1"
  • "4x4"
+0

如何導出職位? – user2314946

+0

@ user2314946這個職位是固定的。閱讀我答案的第二段:_第一項從第一欄開始,到第18欄結束,第二項從第19欄開始,到第25欄結束。 –