2017-08-23 13 views
0

おはよう。Openedgeでのインポート

私は、このリンクで前の質問エクスポートされたCSV上

https://stackoverflow.com/questions/45828926/how-to-export-fields-to-csv-in-openedge/45829432?noredirect=1#comment78621400_45829432

を持って、私は最初の行TABLE NAMEに置きます。このCSVを私のシステムにインポートしたいと思います。

私の現在のコードはこれです:

DEF VAR ic as INT. 
DEF VAR cTable as CHAR. 

INPUT FROM VALUE(SESSION:TEMP-DIRECTORY + "temp.csv"). 

ic = 0. 
REPEAT: 

    ic = ic + 1. 

    IF ic > 1 THEN DO: 
     CREATE cTable. 
     IMPORT DELIMITER "," cTable. 
    END. 

    IMPORT cTable. 

END. 

INPUT CLOSE. 

私は、コードがCREATE部分で間違っていることを知っています。私はこれをどのようにして行うのですか? 2.私がEXPORTするとき、最後のレコードの後に​​追加のBLANK行があります。どうすればCSVファイルを開くことなくこれを削除できますか?

+0

動的構文ではかなり複雑ですが、別の構文を使用する必要があります。しかし、データ・ディクショナリにテーブルをダンプしてロードするツールがあるので、これを行う必要はありません。 –

答えて

2

ファイルの最後の空白行を削除しても問題が解決されない場合は、最後に有効なCSV行をIMPORT文で読み取ることができなくなります。適切に動作するように終了します)。

REPEATブロックがファイルの最後に達したときにIMPORT DELIMITER "," cTable.ブロックが失敗し、ループを終了してENDKEY条件が発生するため、実際の問題はテーブルに空の行があることです。しかし、ループが残る前にCREATE cTable.に電話をしているので、空のエントリを取得します。この説明がわかっていれば、REPEATループがどのように動作するかを理解するのに役立ちます。わからないのであれば、ブレーク条件なしの無限ループのように見えます。

はとにかく(あなたが前に行ったように)あなたが空の行を削除するか、という問題を解決するために、それは完全に有効であるか、そしてREPEATはデフォルトでCREATEUNDOますので、あなたは、一時テーブル定義からNO-UNDOを省略することができます。

CSVヘッダーの行に関する他の質問には、何とか行を読み取らなければなりません。スキップし、ファイルの2行目から読み始めます。 あなたは、単にすべての列のためのchar変数を定義したいと、それをインポートすることができ、ヘッダ名が必要な場合:

IMPORT DELIMITER "," cColumn1 cColumn2. /* for every column */ 

するか、あなたはそれを読んで、無視したい場合はあなたが

IMPORT UNFORMATTED cTemp. 

を使用することができます行全体を読み込む一時変数。

0

不明なファイル形式をインポートしようとしている場合は、データ行全体を読み込み、個々のフィールドを選択してみてください。質問2については、ファイル自体を変更しようとするのではなく、不正なデータをプログラムで処理する方がよいでしょう。

このコードは、空白またはnullのいずれかをスキップしてファイルから各行を読み込みます。次に、行の各カンマ区切りフィールドを通過して表示されます。

DEFINE VARIABLE cTable AS CHARACTER NO-UNDO. 
DEFINE VARIABLE cField AS CHARACTER NO-UNDO. 
DEFINE VARIABLE iLoop AS INTEGER NO-UNDO. 

INPUT FROM VALUE(SESSION:TEMP-DIRECTORY + "temp.csv"). 

REPEAT ON ERROR UNDO, NEXT: 

    IMPORT UNFORMATTED cTable. /* Read an entire line from the file. */ 

    IF cTable = "" OR cTable = ? THEN NEXT. /* Skip blank lines. */ 

    DO iLoop = 1 TO NUM-ENTRIES(cTable, ","): /* Break up the line by the comma delimiter. */ 

     cField = ENTRY(iLoop, cTable). 
     MESSAGE "Field " + STRING(iloop) + ": " + cField VIEW-AS ALERT-BOX. 

    END. 

END. 

INPUT CLOSE. 

ファイルのレイアウトが不明なため、すべてのフィールドが文字として読み込まれます。値が整数、小数点、日付などであるかどうかを判断するためにロジックを追加する必要があります。

関連する問題