2010-10-15 138 views
0

的文本文件都是這種格式在新的.txt擁有所需的值:C++從.txt讀取文件,並使用Xcode的

No.  Time  Source    Destination   Protocol Info 
     1 0.000000 192.168.1.77   203.253.16.41   DNS  Standard query A ksn1.kaspersky-labs.com 

Frame 1: 83 bytes on wire (664 bits), 83 bytes captured (664 bits) 
Ethernet II, Src: Giga-Byt_58:d7:ce (00:1f:d0:58:d7:ce), Dst: D-Link_c4:eb:4a (00:1b:11:c4:eb:4a) 
Internet Protocol, Src: 192.168.1.77 (192.168.1.77), Dst: 203.253.16.41 (203.253.16.41) 
User Datagram Protocol, Src Port: discp-server (2602), Dst Port: domain (53) 
Domain Name System (query) 

我想在C++如何只讀了編碼192.168.1.77203.253.16.41。然後保存2個IP地址值並將其輸出到另一個新的.txt文件中。

我使用的Xcode在Mac OS X 10.5.8開發這個...

至於現在,我能夠讀取「iplist.txt」的第一行,並將其寫入到一個新文件命名爲'output.txt'。我需要關於如何在網上閱讀第二行中使用函數getline()幫助...

下面是我能做到的部分...

ifstream inFile("iplist.txt"); 

     getline(inFile,x); 

     ofstream outFile ("output.txt"); 
      if (outFile.is_open()) 
      { 
       outFile << x; 
       outFile.close(); 
      } 
+0

你看過正則表達式在boost嗎? http://www.cs.brown.edu/~jwicks/boost/libs/regex/doc/introduction.html – 2010-10-15 19:19:07

回答

1

讀取一行並丟棄。閱讀下一行並將其分解爲字段,保持第三和第四。閱讀下面的6行並放棄它們以準備好下一條記錄。

+0

對不起,但我對C++很新。這是爲了我的uni項目。代碼將幫助我... – Kunta 2010-10-15 19:28:57

+0

@Kunta:要讀取一行,通常使用'std :: readline'。要讀取字段,可以將行放入'std :: istringstream'中,然後使用'line >> field1 >> field2 >> field3 >> field4;'。爲了簡單起見,您可以將所有字段定義爲'std :: string's。只是要清楚:雖然我很樂意提供關於如何編寫代碼的建議,但我不會爲您編寫代碼。 – 2010-10-15 19:44:56

+0

謝謝。我正在嘗試編寫代碼,並詢問是否有任何錯誤... – Kunta 2010-10-15 19:52:50

0

來吧。誰使用C++?這是一個單行awk命令:

awk '/^[ \t]/ { printf("%s\t%s\n", $3, $4); }' file.txt 
+0

如果您要使用awk,可以使其更加簡單。如果我沒有弄錯,應該這樣做:''/^[0-9]/{print $ 3 $ 4;}「'應該完成這項工作。 – 2010-10-15 19:41:29

+0

@Jerry:那將試圖匹配整條線......所以不會有匹配。我敢打賭,awk本身可以做到這一點,但我不知道它足以編寫複雜的腳本:) – 2010-10-15 19:47:18

+0

我使用C++,因爲後來我將使用OpenGL將IP地址可視化爲地圖... – Kunta 2010-10-15 19:50:18