2016-11-07 204 views
0

我有格式的這個文本文件:分割文本文件

Token:A1 
sometext 
Token:A2 
sometext 
Token:A3 

我想分裂這個文件分成多個文件,這樣 文件1包含

A1 
sometext 

文件2包含

A2 
sometext 

我對任何編程或腳本語言都沒有太多的想法,最好是什麼該怎麼辦?我正在考慮使用Java來解決問題。

+0

[String.split](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-)(「Token:」) ?給你一個字符串[]與「A1 sometext」,「A2 sometext」... – Fildor

+0

是否「sometext」保證不包含「令牌:」? – Fildor

回答

0

沒有最好的辦法,它取決於你的環境和實際需要。但是,對於任何語言都能找出您的基本算法,並嘗試使用最佳可用數據結構。如果您使用的是Java,請考慮使用guava splitter並查看它的實現。

1

如果你想使用java,我會考慮使用ScannerFilePrintWriter與for循環和一些異常處理,你會很好去。

導入適當的庫!

import java.io.*; 
import java.util.*; 

聲明類課程

public class someClass{ 

    public static void main(String [] args){ 

現在這裏是哪裏的東西開始變得有趣了。我們使用類File來創建一個新文件,該文件將要讀取的文件的名稱作爲參數傳遞。你可以把你想要的任何東西放在文件的路徑中,也可以放在與你的代碼相同的目錄下的文件名。

 File currentFile = new File("new.txt"); 
     if (currentFile.exists() && currentFile.canRead()){ 
      try{ 

接下來我們通過新創建的文件對象創建一個掃描儀掃描。只要文件有新的令牌可以掃描,for循環就會繼續。 .hasNext()僅當掃描器中的輸入具有其他標記時才返回true。 PrintWriter寫入並創建文件。我已經設置它會創建基於循環迭代(0,1,2,3等)的文件,但可以輕鬆更改。 (見new PrintWriter(i + ".txt". UTF-8);

  Scanner textContents = new Scanner(currentFile); 
       for(int i = 0; textContents.hasNext(); i++){ 
        PrintWriter writer = new PrintWriter(i + ".txt", "UTF-8"); 
        writer.println(textContents.next()); 
        writer.close(); 
       } 

這些catch語句是超級重要!沒有它們,你的代碼甚至不會編譯。如果出現錯誤,他們將確保您的代碼不會崩潰。我把它們的內部留空,以便你可以做你認爲合適的事情。

  } catch (FileNotFoundException e) { 
       // do something 
      } 
      catch (UnsupportedEncodingException i){ 
       //do something 
      } 

     } 
    } 
} 

和那差不多它!如果您有任何問題,請務必發表評論!