過去の桐井戸端BBS (桐ver.5)
14285 固定長で書き出しする一括処理をkifix.exeを使ってやっているがエラーになる wa2new 2001/11/29-16:38
うまくいかないので再度おうかがいします。
いまだに桐V5ですが、
固定長の書き出しを印字コマンドですべきところを
面倒なので いつもkifix.exe @????.parとバッチ処理しています。
エラーメッセージ”漢字コードが2つのフィールドにまたがっています”で中断します。
仕方なく 表編集にもどり #全角 でフィールドデータをでっかくしてクリアーしています。
これでは ACCESSなどのフォームにもっていくといくら幅があっても足りません。
(全角なので 横に 広がりすぎ!)

ここで質問ですが
以前No14145でのお答えを参考に
ある 表に 問題の 桁(バイト数)が合わないでエラー
”漢字コードが2つのフィールドにまたがっています”
を 誘発してる フィールド【申し送り】が有るとします。

まず
文字列【申し送り】フィールド の桁数を #桁数 で 数値【ダミー桁数】フィールド に 置換し記入します。
次に
【ダミー桁数】を #MOD({ダミー桁数},2)で置換し 答えが 1 のレコードを選択状態にします。
最後に
ターゲット だった 文字列【申し送り】フィールド に
#連結({申し送り},” ”) と 置換して半角スペースを足します。

そして k3 に書き出して kifix.exe @????.par としましたが
エラーメッセージ”漢字コードが2つのフィールドにまたがっています”で中断します。

で、だめでした?どこが悪いのでしょうか?
よろしくお願いします。

14286 つまり●再●固定長のkifix.exeと印字コマンド wa2new 2001/11/29-16:45
記事番号14285へのコメント

>そして k3 に書き出して kifix.exe @????.par としましたが
>エラーメッセージ”漢字コードが2つのフィールドにまたがっています”
>で中断します。
●つまり 全角=2バイトなら 変換できるので 奇数のバイト数なら通らないのだろう?と考え 半角1バイトをたしたのですが
うまく行かない・・・・という 事なのです。
14290 Re:つまり●再●固定長のkifix.exeと印字コマンド masa 2001/11/29-18:12
記事番号14286へのコメント
wa2newさん 今晩は。

>
>>そして k3 に書き出して kifix.exe @????.par としましたが
>>エラーメッセージ”漢字コードが2つのフィールドにまたがっています”
>>で中断します。
>●つまり 全角=2バイトなら 変換できるので 奇数のバイト数なら
>通らないのだろう?と考え 半角1バイトをたしたのですが
>うまく行かない・・・・という 事なのです。

最初の時の他の方々の解答が見付けきれなかったのでダブってしまうかも知れませんが、
桐の方で相手先で読み込めるように項目値毎に分けて、
最終的に連結すれば大丈夫なのではないでしょうか?

例えば[A]の値を10桁で出したい時、
#部分列(#複写(" ",10-#桁数(#文字列([A])))+#文字列([A]),-1,-10)
で、それを連結した項目値を書出しすれば相手側も読み込めるのではないでしょうか?


14291 ちなみに●再●固定長のkifix.exeと印字コマンド wa2new 2001/11/29-19:19
記事番号14290へのコメント
masaさん

>例えば[A]の値を10桁で出したい時、
>#部分列(#複写(" ",10-#桁数(#文字列([A])))+#文字列([A]),-1,-10)
>で、それを連結した項目値を書出しすれば相手側も読み込めるのでは
>ないでしょうか?

こんばんわ masaさんへ
●つたない質問に回答をありがとうございます。
ちなみに
http://www.fuku3.com/~habata/cgi-bin/bbs/bbs.cgi?num=14146&ope=v&page=1&id=
でOgo氏が回答していただいておりますが、
今回いただいた masaさんのお答え は文字数をバイト数で扱い
きっちり 項目毎に
>例えば[A]の値を10桁で出したい時、
10バイトを 1バイト目から数えて10バイト未満のものに 半角スペースで埋めて
10バイトにして出力する というわけですよね。

実は 対象項目が全角・半角混在でだらだらして今時のメモフィールドみたいな感じなんです。
前出のOgo氏は
>>エラーメッセージ”漢字コードが2つのフィールドにまたがっています”
>で中断します。
という私の Kifix.exe のエラーメッセージを見て

>固定長ファイルの定義を仮に次の通りとします。
>項目1……9文字
>項目2……9文字
>項目3……9文字
>項目1<-|項目2<-|項目3<-|
>123456789012345678901234567
>当たり前の話ですが、固定長の場合の「文字数」
>とは絶対に半角で計算します。
>で、上記エラーメッセージはこういうことです。
>項目1<-|項目2<-|項目3<-|
>123456789012345678901234567
>全角文字を何も考えずにいれる
>全角文字の5文字目は、半角計算で 9 文字目と
>10文字目にまたがっています。
>が、これは1文字の途中に項目区切りが指定さ
>れているということで、全くの「規格外データ」
>なのです。

と回答いただきました。
私の頭では
@固定長に出す前の *.k3 などのファイルを Kifix.exeが調べて
奇数のバイト数なら カットできません!という意味でとらえ
桁数=バイト数を偶数にあわせてみまして ダメ でした。
Aよく Ogo氏の回答を拝見しましたら
>全角文字を何も考えずにいれる
>全角文字の5文字目は、半角計算で 9 文字目と
>10文字目にまたがっています。
>が、これは1文字の途中に項目区切りが指定さ
>れているということで、全くの「規格外データ」
>なのです。
と有りますので
元データが予定の固定長が要求してるバイト数より
桁数が小さければ masaさん の方法でいけるなと思いましたが
●実は 対象項目が全角・半角混在でだらだらして今時のメモフィールドみたいな感じで
なお且つ 予定の固定長が要求してるバイト数よりも長いのでした。
従って たぶん これから 行いますが各エラー対象の項目について
切り出し 予定の項目のバイト数を調べて 切り出し予定のバイト数目が
一つの文字 に またがってるか 否か?
を知る 方法 を新たに質問させてください。

では よろしくお願いします。

14292 ことによると●再●固定長のkifix.exeと印字コマンド wa2new 2001/11/29-19:35
記事番号14291へのコメント
>桁数が小さければ masaさん の方法でいけるなと思いましたが
>●実は 対象項目が全角・半角混在でだらだらして今時のメモフィールド
>みたいな感じで なお且つ 予定の固定長が要求してるバイト数よりも
>長いのでした。 従って たぶん これから 行いますが
>各エラー対象の項目について
>切り出し 予定の項目のバイト数を調べて 切り出し予定
>のバイト数目が 一つの文字 に またがってるか 否か?
>を知る 方法 を新たに質問させてください。
>
>では よろしくお願いします。


ことによると?
対象 項目の文字列の一文字目から #文字数 の文字数が満たされるまで 繰り返し 半角or全角を調べて
桁数を加算していって 切り出し予定 のバイト数 を満たした1文字が 半角or全角によって
何文字目まで取り出すかを 判断して固定長きり出し要求の最後の1文字を減ずるのでしょうか?

どなたか ご教授ください。
よろしくお願いします。

14294 Re:ちなみに●再●固定長のkifix.exeと印字コマンド masa 2001/11/29-20:22
記事番号14291へのコメント
wa2newさん 今晩は

>今回いただいた masaさんのお答え は文字数をバイト数で扱い
>きっちり 項目毎に
>>例えば[A]の値を10桁で出したい時、
>10バイトを 1バイト目から数えて10バイト未満のものに 半角スペースで埋めて
>10バイトにして出力する というわけですよね。

そうです。

>
>実は 対象項目が全角・半角混在でだらだらして今時のメモフィールド
>みたいな感じなんです。

桐の表に書出す前のデータがあると思うのですが、

項目Z
1トウキョウト
1トウキョウト
1東京都

#部分列で表示させるとこういう風になってしまうという事でしょうか?

項目A |項目B |項目C
-------------------------
トウキョウト |    |
トウキ |ョウ  |ト
東京都 |    |


>と回答いただきました。
>私の頭では
>@固定長に出す前の *.k3 などのファイルを Kifix.exeが調べて
>奇数のバイト数なら カットできません!という意味でとらえ
>桁数=バイト数を偶数にあわせてみまして ダメ でした。
>Aよく Ogo氏の回答を拝見しましたら
>>全角文字を何も考えずにいれる
>>全角文字の5文字目は、半角計算で 9 文字目と
>>10文字目にまたがっています。
>>が、これは1文字の途中に項目区切りが指定さ
>>れているということで、全くの「規格外データ」
>>なのです。
>と有りますので
>元データが予定の固定長が要求してるバイト数より
>桁数が小さければ masaさん の方法でいけるなと思いましたが

項目できりのいい所で分割は出来ないのでしょうか?
項目1 #部分列([A],-1,-136)
項目2 #部分列([A],-137,-256)


>●実は 対象項目が全角・半角混在でだらだらして今時のメモフィールド
>みたいな感じで なお且つ 予定の固定長が要求してるバイト数よりも
>長いのでした。 従って たぶん これから 行いますが
>各エラー対象の項目について
>切り出し 予定の項目のバイト数を調べて 切り出し予定
>のバイト数目が 一つの文字 に またがってるか 否か?
>を知る 方法 を新たに質問させてください。

桐で読み込まれるデータが何かで書き出されてると思いますが、
それは何バイトから何バイトは、これ という風にメモ帳等でみた時、きれいに頭がそろっていないのですね?

14295 Re:ちなみに●再●固定長のkifix.exeと印字コマンド masa 2001/11/29-20:27
記事番号14294へのコメント

>桐の表に書出す前のデータがあると思うのですが、
>
>項目Z
>1トウキョウト ←半角文字のつもり(この欄で自動で全角になったので)
>1トウキョウト
>1東京都
>
>#部分列で表示させるとこういう風になってしまうという事でしょうか?
>
>項目A |項目B |項目C
>-------------------------
>トウキョウト |    | ←半角文字のつもり(この欄で自動で全角になったので)
>トウキ |ョウ  |ト
>東京都 |    |
>

14296 Re:ちなみに●再●固定長のkifix.exeと印字コマンド masa 2001/11/29-20:38
記事番号14294へのコメント

wa2newさん 今晩は


>>実は 対象項目が全角・半角混在でだらだらして今時のメモフィールド
>>みたいな感じなんです。

今ふと思ったのですが、その読み込むデータを先にエクセルで読み込んだらと思いました。
エクセルだとフィールド毎に区切って読み込めるような気がします。
(昔やった、かすかな記憶があります)
その後エクセルでカンマ区切り等で出力し、桐で読み込んで前に書いたように項目毎のバイト数を合わせて出力すれば、
うまくいくのではないでしょうか?


14302 ●解決感謝 m(._.)m ●固定長のkifix.exeと印字コマンド wa2new 2001/11/30-11:07
記事番号14294へのコメント
masaさん

>項目できりのいい所で分割は出来ないのでしょうか?
>項目1 #部分列([A],-1,-136)
>項目2 #部分列([A],-137,-256)
↑これで解決しました。

●今回の疑問は #部分列 のマイナス指定のバイト数と
1つの項目を構成する文字が半角・全角混在で有った時に固定長の255バイト が 要求されたら
255バイトと256バイト目にかかってる 1つの文字を
@#部分列 のマイナス指定での置換ではどうなるのか?
AKifix.exe で バイト数を指定して *.k3 を変換する時に
エラーメッセージ”漢字コードが2つのフィールドにまたがっています”
との関係はどうなのか?
など でした。
詳細は不明ですが
>項目できりのいい所で分割は出来ないのでしょうか?
を参照し 固定長での切り出し予定のバイト数で #部分列 のマイナス指定で項目置換した後に *.k3 で書き出したデータを
Kifix.exe @*.par で変換したところエラーメッセージ”漢字コードが2つのフィールドにまたがっています”
は無くなりましたので 業務上は 解決いたしました。
有り難うございました。

戻る