Free Trial

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

日本語特有文字を含んだ1レコードデータを定義に沿って分割する方法

post
メテオロイド

かなり古くからあるシステムのデータファイルを特徴量候補としてデータ結合する必要が出たのですが

データファイルが独特でうまく読み込むことができません。

 

データファイルは

・Shift-JIS

・ヘッダーなし、カンマなし、TABなし、改行なしの行列非分割1レコードデータ

・全角文字、半角カナを含む項目あり。指定バイト数に満たない項目は半角ブランクで埋められている

・データ定義はあり、バイト数指定で行列分割を定義。列、行は全て固定長

 

やりたいことは全角文字、半角カナを含む項目ありの行列非分割1レコードデータをデータ定義に沿って分割したいです。

 

例. 識別子(3バイト)、県名(8バイト)、県庁所在地(8バイト)

 

060北海道  サッポロ   231神奈川県ヨコハマ    [EOF]

"060","北海道  ","サッポロ   "

"231","神奈川県","ヨコハマ    "

 

全角文字、半角カナがなければデータ入力の単層ファイルレイアウトで固定長分割できるのですが

UTF-8で読み込まれるため全角文字、半角カナがあると文字化けとバイトずれが起こりうまく読み込みも分割もできません。

 

やりたいことをalteryxで達成する方法はありますでしょうか?

 

2件の返信2
AkimasaKajitani
17 - Castor
17 - Castor

以下のような感じでとりあえず読み込みはできました。

考え方としては、文字コードを1バイトとして読み込み後で変換かけてやることでしょうか。

 

ポイントは、

1.データ入力ツールはテキストを読み込むような設定で実施(区切り「\0」フィールド長は長めに取る)

2.読み込み時の文字コードは、「ISO 8859-1ラテン語I」

3.行分割は正規表現ツールのトークン化「.{19}」。

4.列分割も正規表現ツールの解析で「(.{3})(.{8})(.{8})」。

5.文字コードをConvertFromCodePage関数でShift-JISに。

です。

 

めんどくさいのが、いろいろなファイルがあると、行分割のときのバイト数合計を変えたり、列分割の際の正規表現のバイト数など色々といじらないといけないことかと思います。

 

AkimasaKajitani_0-1597204417317.png

 

AkimasaKajitani_1-1597204882336.png

 

AkimasaKajitani_3-1597204986989.png

 

 

AkimasaKajitani_5-1597205062001.png

 

AkimasaKajitani_7-1597205129625.png

 

しかし、なかなか嫌がらせみたいなフォーマットですね・・・昔のファイル容量削減するための工夫でしょうか・・・。

 

post
メテオロイド

ありがとうございます!

これはすごい・・・正規表現2回に分ける発想は出ませんでした。

 

別のディスカッションでも文字コード問題を質問してますが

データの入力に困ったらまずはISOのラテン語で読み込みところから始めるんですね。

 

これ覚えておきます。

改めてありがとうございました!