CLOSE
バグ情報_通常

概要

DataWindow オブジェクトの ImportFile() 関数を使用して CSV ファイルを読み込む際、開始行を指定する引数 startrow(例: ヘッダー行をスキップするための startrow = 2 など)を設定していると、CSV 内の二重引用符(")で囲まれた項目に含まれる改行コードが正しく認識されず、物理的な改行コード単位で処理が行われてしまう不具合が発生します。

バグ ID15235
製品PowerBuilder
ステータスAppeon にて検証・修正対応中
バージョン日本語版英語版
12.6 以前×
2017 (R2)
2017 (R3)
2019
2021
2022×
◯:修正済み/未発生、×:未修正、-:未確認 (※ 2017 以外のバージョンについてはリリースされている最新リビジョンでの状況です)

詳細

ImportFile() 関数における startrow のスキップ判定処理において、二重引用符(")で囲まれたテキストのエスケープ解析が行われず、純粋な物理改行コード単位でスキップ行数がカウントされることが原因です。

たとえば、1 行目のヘッダー項目内に改行が含まれている CSV ファイルを startrow = 2 (2 行目から読み込み) でインポートした場合、1 行目のヘッダー内にある改行の時点で「2 行目」と誤判定されます。その結果、本来読み込まれるべき 2 行目のデータ前半部分がヘッダーの一部としてスキップされ、データ崩れや取り込み件数の不整合が発生します。

なお、startrow を指定せず全件読み込む場合 (または startrow = 1 指定時) は、ダブルクォーテーション内の改行、カンマ、エスケープ ("") はすべて正常にサポート・処理されます。

不具合の具体例

回避策

本不具合が修正されるまでの間、以下のいずれかの方法で回避してください。

startrow = 1 で全件インポート後に不要行を削除する (推奨)
startrow によるスキップ機能を使用せず、一度 startrow = 1 で全データを DataWindow へインポートした直後に、スクリプトで先頭の不要行 (ヘッダー行) を削除します。

XML フォーマットを使用する
取り込みファイルのフォーマットを CSV 形式から XML 形式に変更し、ImportFile(XML!, ...) を使用してインポートを行います。

x instagram facebook youtube