2017-10-13 8 views
0

フィールドの位置が常に同じバッチスクリプトによって作成されるテキストファイルがあります。そのファイル内では、特定の位置に移動してフィールドを追加する必要があります。例えばファイルの特定の位置に書き込む

、私のファイルは2つだけのラインを持っており、次のフィールドがあるとします。

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

私は新しいファイルは次のようになりますので、アドレスと価格の間の余分なフィールドを追加したいです:私は、特定の位置に移動することができます任意のUtilityクラスを見つけることができませんでした

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

ファイル内の行とそれに書き込む。


私はそれがより多くを持っているので、あまりにも面倒で(非常に退屈だったこと、しかし、それに空白を含めて、新しいファイルへのフィールドごとに、それを吐き出し配列にフィールドを配置する面倒な方法を行うことができます90フィールド以上)、より簡単な方法があるかどうか疑問に思っていました。

+0

これを行うために、バッチスクリプトのアップストリームを追加できないのはなぜですか?このダウンストリームを実装するより簡単で危険性は低くなります。 – Makoto

+0

@Makotoええ、私は同意する、私たちは将来これを行う話があるが、このファイルを受け取ったチームはそれを整列させることができない。また、私が言及しなかったファイルのマイナーな処理があります。 – Luffy

+0

@Luffyテキストファイルのすべての行で列の数が同じですか? – user3437460

答えて

0

ファイルの途中に追加するのを忘れてしまいます。ファイルは一連のバイトなので、挿入ポイントの後にすべてのバイトを処理してからNバイト先に移動して、変更する場所を作成する必要があります。これは、処理中のファイルを処理し、新しい行を別のファイルに書き込むよりもコストがかかります。

1

私はそれを新しいファイルにフィールドごとに空白を含む配列にフィールドを配置し、それを吐き出しの退屈な方法を行うことができ、しかし、それはそれはより多くを持っているので、(あまりにも面倒で非常に退屈でした90フィールド)、もっと簡単な方法があるのだろうかと思っていました。

Javaを使用する場合は、テキスト間にデータを挿入する方法はありません。ファイルの末尾にのみ追加することができます。

新しい列を挿入してデータファイル全体の形式の一貫性を維持する必要がある場合は、値のない行の空白を挿入する必要があります。したがって、すべての行を書き直すことは避けられません。

私はあなたのものを見つけることができなかった場合は、1を自分で書くことができ、ファイル内の行の特定の位置に移動し、それに

を書くことができます任意のユーティリティクラスを見つけることができませんでした。実際には面倒ではありません。あなた自身でユーティリティクラスを書くだけで、将来あなたはそれを使うことができます。

//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では不可能です。しかし、あなたはそれを行うためにあなた自身のクラスを書くことができます。あなた自身のクラスでは、行ごとに読むようにしてください.etc(すべての退屈なもの)。しかし、次回に特定の位置に挿入する必要がある場合は、これを実行するのは1つの方法です。 – user3437460

+0

Gotchaありがとうございます! – Luffy

関連する問題