仕事で行うのに必要です。
パソコン(JIS8)から汎用機k-6700a(JEF+EBCDIC)へデータを送ります。
その際、日本語項目で半角全角混在のデータがあり変換させるのに
苦労しています。
汎用機k-6700a側で変換を掛けたいのですが、何か良い手はないでしょうか?

自分で調べた限りでは、サービスツールの標準コード変換サブルーチンで
JIS8⇒JEF+EBICDICはできるみたいなのですが、半角全角の区別をどう付けて
良いものかどうか・・・

わかりやすい解答をお待ちしています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

PC9801の時代、AG-TECHさんの「JF-TRAN」というソフトに助けられてました。


http://www.agtech.co.jp/products/jftran/index.html

Windowsの時代の現在は「dbExcahge」が良いかも。
http://www.agtech.co.jp/products/dbEXchange/
こちらは使用したことがないけど、評価版ダウンロードができるようです。

参考URL:http://www.agtech.co.jp/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考URLを見させて頂いたのですが、確かにこちらでの
方法で変換可能だとわかりました。
ただ、最初に言い忘れていたのですが、新たにソフト等を購入することなく、
且つ、あくまでも汎用機側にて変換がしたい場合でお願いしたいのですが・・・
(特に半角全角混在項目の変換方法、全角半角の見極めかた等を)

お礼日時:2002/02/04 10:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCOBOLによる全角・半角混在→全角に

いつもお世話になっております。
COBOLで全角、半角が混在したデータを全角だけに変換したいのですが、
何か良い方法はありませんでしょうか?
宜しくお願い致します。

Aベストアンサー

(1)付属・データをコンバートするツールはありませんか?

(2)データがDBであれば、アクセスなどでODBC経由でデータを取り込み、STRCONV などで変換は可能だと思います。

(3)TEXT形式で出力出来れば、こちらもアクセスやエクセルなどで、変換可能だと思います。

※但し、件数が多い場合や、特殊文字など多くある場合は不向きかも!
文字化けなどの確認が取り辛いでしょうから。。。(^^;

(4)COBOL で変換コードを入れ、変換するPGを作成しましょう。こちらが1番かたいと思います。

QChr(13)とChr(10)の違いは?

myStr = Replace(myStr, Chr(13), "")

myStr = Replace(myStr, Chr(10), "")

で、改行を置換しているのですが、どちらかでも改行できる時や
どちらかじゃないと改行できない時があります。

そもそもChr(13)とChr(10)の違いはなんでしょう?
どちらも改行ですよね?
何が違うのでしょう?

Aベストアンサー

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利になります。■

ひとまず、VBAでの改行の扱いに慣れるには
■VBAで用意された文字列定数について知っておいた方がよいと思います。■
 VBE(Visual Basicの編集画面)が開いている状態で、
 F2 キー → オブジェクトブラウザー起動
 検索小窓に、vbCrLf、とタイプして、検索ボタン
 VBA.Constantsクラスのメンバーが表示され
 その中にすべての改行文字(文字列定数)が含まれています。
 そのまま、F1 キーでヘルプを表示します。
詳しい説明はヘルプを読む方がいいでしょう。

実践的な話として、
Chr(10)やChr(13)は関数の戻り値です。
対して、
vbLfやvbCr(またはvbCrLf)は定数です。
定数で済ませられるなら、定数の方が何かと有利です。
定数の名前は略号ですから、実態をイメージし易くなっています。
定数の扱いに慣れることをお奨めします。
例)
  myStr = Replace(myStr, vbLf, "")
  myStr = Replace(myStr, vbCr, "")
  myStr = Replace(myStr, vbCrLf, "")

もしも文字列定数を先に覚えていたなら、疑問にもならなかったのかも知れませんね。
私の場合は、改行の何たるかを覚える前に文字列定数覚えていて、困ることありませんでしたから。

以上、ご参考まで。

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利...続きを読む

QIBM漢字コードのSJIS変換方法

こんにちは。

現在IBMホストのデータをFTPしてUNIX上にて使用しています。ファイルの内容はcsvファイルで、ある項目は英数字のみ、ある項目は漢字のみというような物です。
現在、英数字は上手くいってますが、漢字の部分が化けてしまっています。

今やっているやり方は、ホストのファイルをbinaryモードでFTPして、ddコマンドにてEBICDICコードをASCIIコードに変換します。しかし、漢字の部分が化けているという状況です。

IBMのホームページをみると、
「IBM漢字コードとシフトJISとの変換は、オペレーティング・システム標準の iconvコマンドとiconv()サブルーチンで可能ですので、こちらをご利用下さい。 」

と書いてありますが、まったく要領を得ません。
iconvをmanのコマンドで見ましたが、書いてある内容が理解できません。
どなたか同じような経験をしたかた、アドバイスをよろしくお願いします。
iconvのオプションはこう付ければ上手くいくとか、
変換表を自前で作成したなどなど、他にこんな方法があるなどヒントをいただけると助かります。

こんにちは。

現在IBMホストのデータをFTPしてUNIX上にて使用しています。ファイルの内容はcsvファイルで、ある項目は英数字のみ、ある項目は漢字のみというような物です。
現在、英数字は上手くいってますが、漢字の部分が化けてしまっています。

今やっているやり方は、ホストのファイルをbinaryモードでFTPして、ddコマンドにてEBICDICコードをASCIIコードに変換します。しかし、漢字の部分が化けているという状況です。

IBMのホームページをみると、
「IBM漢字コードとシフトJISと...続きを読む

Aベストアンサー

unixのiconvコマンドについては、下記サイトの説明がわかりやすいかと。

ただし、メーカーによって実装に違いがあるかも知れませんので、あとはmanコマンドで参照した内容で補足してください。

参考URL:http://docs.hp.com/ja/B3782-90873/ch07s04.html

QEBCDICへの変換

VB.NETまたは、C#.NETでのEBCDIC(漢字)→SJISへの
変換は可能でしょうか?
下記ページは一度拝見しましたが、IBM EBCDIC (日本語カタカナ)
しか無いようでです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/013enumenc/enumenc.html
自分で作る以外だと、ミドルウェアに頼るしかないのでしょうか?
よろしくお願いします。

Aベストアンサー

>.NETの標準のメソッド(Encodingクラス)等では、
>変換は無理なのでしょうか?
 この辺のことは、ちょっと判りません。
 ご免なさい。

QCOBOL数値転記の仕様

このたび、まったくの未経験のCOBOLをやることになりました。
で、数値データの表し方になんやかやとやたら方法があるようなのですが、それらを互いに「転記」したときに、どういう結果になるものか、皆目わからないんです(環境はCOBOL85でWindows上での開発です)。
テクニックとしては基本だと思うのですが、それでいてどこにも説明されていな~い!フリーのCOBOLツールは見つけてきましたが、使い方が???なもので…。
 たとえば、

 01 X1 PIC XX (数値が入ってるとします)
 01 N1 PIC 99
 01 D1 PIC 99 COMP
 01 B1 PIC 1(16) BIT

な場合、X1とN1は直接
 MOVE N1 TO X1
などとやってもデータは失われないと思うんですが、他の形式での操作は(桁あふれとか無視して)ちゃんと転記できるのでしょうか。

いま特に、D1からX1へというパターンが多いです。1バイトの2進データを、数値の文字列として使おう、というんです。いわば、1バイトを3バイトに展開してやるんです。何も考えずに書けば、
 01 D2 PIC 9(4) COMP VALUE 97
 01 X2 PIC X(3)
 MOVE D2 TO X2
でしょうけど、たぶん'a△△'になるだけのような気がします…。
 それとも、
 01 N2 PIC 9(4)
 MOVE D2 TO N2
 MOVE N2 TO X2
などとやっていけたりするのでしょうか。

いったいどうなるのでしょう、いろいろ書いちゃいましたけど、各々の転記の仕組みを教えてください。

また、COBOLの(お堅い規格を書き写しただけでない)解説のサイトなどあれば、ご紹介いただけますでしょうか。

このたび、まったくの未経験のCOBOLをやることになりました。
で、数値データの表し方になんやかやとやたら方法があるようなのですが、それらを互いに「転記」したときに、どういう結果になるものか、皆目わからないんです(環境はCOBOL85でWindows上での開発です)。
テクニックとしては基本だと思うのですが、それでいてどこにも説明されていな~い!フリーのCOBOLツールは見つけてきましたが、使い方が???なもので…。
 たとえば、

 01 X1 PIC XX (数値が入ってるとしま...続きを読む

Aベストアンサー

ShiozawanoYukiさんはCOBOL未経験とのことですが
ご質問のような数値と文字との間の転記はCOBOL上規約はありますが実際には例外的にしか行われないでしょう。

COBOLコードの厳しい社内ルールを定めてる会社では数値と文字との間の転記は禁止されています。
(桁あふれ、計算時に不能や範囲外の値になったり、ひどいとエラー終了になるか引き起こしたりするからです。)
転記する場合は同じ桁数同士のみで行う社内ルールを決めているところもあります。
(桁あるれ対策です。)

*数値と文字との間の転記はデータの定義で対処します。

COBOLのデータは構造体になっています。
(ご質問のようなデータ構造はフラグ、繰り返しや一時的な変数などには使用しますが普通はレベルを使用したデータ構造で定義します。)

>MOVE N1 TO X1
のコードのデータは

 01 X.
  02 X1 PIC 99.
 01 N1 PIC 99.

などと定義し転記後に文字で使用する場合は”X”(2桁)を使用します。
しかし、ただ”N1”を文字として使用するだけである場合は

 01 NX.
  02 N1 PIC 99.

と定義し、”NX”(2桁)を文字として使用する方法もあります。
(これは9タイプとXタイプの内容が同じため利用できますがバイナリなどでは転記してから利用します。)


逆に数値から文字に転記する場合は

 01 D2 PIC 9(4) COMP VALUE 97.
 01 X2.
  02 X9 PIC 9(4).
 01 XR REDEFINES X2.
  02 XR1 PIC X(02).
  02 XR2 PIC X(02).

   MOVE D2 TO X9.

となり文字として使用する場合は”X2”(4桁)を使用します。
”X2”は数字から転記されたので”0097”が入っています。

”X2”を”△△97”にする場合は”X9”を”ZZZ9”または”ZZZZ”(”Z(04)”)の編集項目で定義すれば実現できます。
(”0”(”0000”)を転記した場合に”ZZZ9”は”△△△0”、”ZZZZ”は”△△△△”になります。)

4桁を上2桁と下2桁で使用する場合は上記のように”X2”を再定義(REDEFINES)し”XR1”、”XR2”を使用します。
(個人的には最上位レベルでの再定義は避けるようにしています。)

*実は転記を悩まずに行うには、実は上の厳しい社内ルールと記した”同じ項目種類、桁数でのみ転記”を行い、項目種類の変換はデータ定義で行うのがポイントです。


*COBOLを理解するためにはデータ構造を理解することが良いと思います。
 (命令は他の言語より少なく対応が容易です。ただ、少ない分、自分でコード作成が必要です。ここが他の言語しか知らないプログラマには大変かもしれません。)

後、ピリオドを付けないとのルールがないなら、命令の最後にはピリオドを付けましょう。
(IF文の中では逆に付けません。そのため逆にピリオドがトラブルの原因ともなり、モジュールの最後だけに付けるとの社内ルールを決めているところもあります。)

>また、COBOLの(お堅い規格を書き写しただけでない)解説のサイトなどあれば、ご紹介いただけますでしょうか。

残念ですがCOBOLは他の言語と違い歴史がある割りには定番類があまりありません。

最新のCOBOLは他の言語のように色々な命令が追加されているようですが、本来は当時のプログラミングの専門家以外でもプログラムを作成することを目標に設計されています。
(当時といっても、もう半世紀も前の話ですが・・・)
そのため、元は限られた命令と定義されたデータ構造だけでプログラムが作成できます。
(バッチであればファイル処理と帳票処理を中心に憶えれば良いと思います。問題はオンラインとWebの場合ですが真似からなれるしかないかもしれません。)


参考になるでしょうか?

ShiozawanoYukiさんはCOBOL未経験とのことですが
ご質問のような数値と文字との間の転記はCOBOL上規約はありますが実際には例外的にしか行われないでしょう。

COBOLコードの厳しい社内ルールを定めてる会社では数値と文字との間の転記は禁止されています。
(桁あふれ、計算時に不能や範囲外の値になったり、ひどいとエラー終了になるか引き起こしたりするからです。)
転記する場合は同じ桁数同士のみで行う社内ルールを決めているところもあります。
(桁あるれ対策です。)

*数値と...続きを読む

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

Q全角空白のTRIMができない・・・

文字列の前後の全角空白を除去するのに
trimが使えると思っていたのですが、できませんでした。
(半角なら取れるのですが・・・)

select trim(' あいうえお ') from dual;

何とか前後の全角空白を除去したいのですが、
何か方法はないでしょうか。

Aベストアンサー

こんな感じ。
select trim(' ' from ' あいうえお ') from dual

第2引数で消したい文字を指定できます。
select rtrim(ltrim(' あいうえお ',' '),' ') from dual

Qテーブルの差分をとる結合

TableAとTableBがあります。構造は同じです。
中身は下記のようだとします。
TableA      TableB
ID VALUE     ID VALUE
1 A       3 C
2 B       4 D
3 C       

差分結合結果を下記のようにとりたいのです。
1 A
2 B
4 D

良い方法をご存じでしたら、ご教授よろしくお願い致します。

Aベストアンサー

SQL Server 2005 以降であれば、EXCEPT が使えるので、TableA - TableB と TableB - TableA の結果を UNION してやれば良いかと。
http://codezine.jp/article/detail/1304?p=2

例) --------------------------------------------------------------
(SELECT * FROM TableA
EXCEPT
SELECT * FROM TableB)
UNION ALL
(SELECT * FROM TableB
EXCEPT
SELECT * FROM TableA);
------------------------------------------------------------------

EXCEPT が使えないバージョンの場合は、 NOT EXISTS を使って差分を抽出してやれば良いでしょう。

例) --------------------------------------------------------------
SELECT * FROM TableA
WHERE NOT EXISTS (
SELECT 'X' FROM TableB
WHERE TableA.ID = TableB.ID AND TableA.VALUE = TableB.VALUE
)
UNION ALL
SELECT * FROM TableB
WHERE NOT EXISTS (
SELECT 'X' FROM TableA
WHERE TableA.ID = TableB.ID AND TableA.VALUE = TableB.VALUE
)
------------------------------------------------------------------

SQL Server 2005 以降であれば、EXCEPT が使えるので、TableA - TableB と TableB - TableA の結果を UNION してやれば良いかと。
http://codezine.jp/article/detail/1304?p=2

例) --------------------------------------------------------------
(SELECT * FROM TableA
EXCEPT
SELECT * FROM TableB)
UNION ALL
(SELECT * FROM TableB
EXCEPT
SELECT * FROM TableA);
------------------------------------------------------------------

EXCEPT が使えないバージョンの場合は、 NOT ...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング