2010-10-15 140 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