2017-10-13 161 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

相关问题