2017-10-13 159 views
0

我有一個由批處理腳本創建的文本文件,其中字段位置始終相同。在那個文件中,我想要去一個特定的位置並添加一個字段。寫入文件的特定位置

例如,假設我的文件只有兩行,並具有以下字段:

number customer_id account_no address price plan 
number customer_id account_no address price plan 

我要添加地址和價格之間的一個額外的字段,以便新的文件將類似於此:

number customer_id account_no address newfield price plan 
number customer_id account_no address newfield price plan 

我找不到任何Utility類,可以去特定位置文件中的一行並寫入它。


我能做到這一點通過現場放置領域多種多樣,包括空格和隨地吐痰出來領域的一個新的文件的繁瑣方式,但是,過於繁瑣,非常繁瑣的(因爲它有更多超過90場),並想知道是否有更簡單的方法。

+0

爲什麼上游的批處理腳本不能擴充來執行此操作?這比下游實施更簡單,風險更小。 – Makoto

+0

@Makoto是的,我同意,我們確實有一個故事會在未來做到這一點,但接受這個文件的團隊無法對齊。另外,我沒有提及那個文件的小處理。 – Luffy

+0

@Luffy文本文件中所有行的列數是否相同? – user3437460

回答

0

忘記追加到文件中間。文件是字節序列,因此,您需要先處理插入點後的所有字節,然後將它們向前移動N個字節以創建修改位置。這花費的不僅僅是處理文件,並且將新行寫入另一個文件。

1

我可以這樣做,將字段放入包含空白字段的數組並將其逐字段地分發到新文件,但這太繁瑣且非常繁瑣(因爲它具有多於90場),並想知道是否有更簡單的方法。

如果您是通過使用Java來完成的,則無法在文本之間插入數據。它只允許你追加到文件的末尾。

無論如何,如果您需要插入一個新列並保持整個數據文件的格式一致性,那麼您需要爲沒有值的行插入空格,因此重寫所有行仍是不可避免的。

我找不到任何可以去線的特定位置的文件,並寫入任何實用工具類

如果你無法找到一個,你可以自己寫一個。實際上並不那麼單調乏味。只需自己寫一個實用程序類,以便將來可以使用它。

//A brief example.. 

public final class FileUtility{ 

    private static String filepath; 

    public static void setFilePath(String filepath){ 
     FileUtility.filepath = filepath; 
    } 

    public static int searchField (String fieldname, int lineNo){ 
     //return position of given field namein a specific line 
    } 

    public static void insertDataAt (String data, int column){ 
     //return position of given field 
    } 

    public static boolean dataExist(String data, int lineNo){ 
     //return true if given data exist at given line number 
    } 
} 
+0

因此,我做這件事的唯一方法是閱讀每行的每一列。如果我知道該列的位置,則無法訪問該行的特定列 – Luffy

+0

@Luffy否,在Java中不可能。但你可以寫你自己的課程來做到這一點。在你自己的班級中,讓它逐行閱讀。(所有的單調乏味的東西)。但下一次你需要插入特定的位置時,它將只是一個單線的事情。 – user3437460

+0

要謝謝你! – Luffy

相關問題