■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#5735-0テキストファイルの読み方についてけん1999-12-16(木) 09:58
     #5742-0RE#5735:テキストファイルの読み方についてみゃお1999-12-16(木) 10:57
     #5759-0お礼RE#5735:テキストファイルの読み方についてけん1999-12-16(木) 15:26
     #5767-0RE#5759:お礼テキストファイルの読み方についてRei1999-12-16(木) 17:55
#5735-0
テキストファイルの読み方について
こんにちは、テキストファイルの読み方等について質問があります。
固定長のテキストファイルを読み込みACCESSのデータに追加したいと思っています。
テキストファイルの内容は、ヘッダ部の行と明細部の行が同じファイルに順番に入っています。
例)レコード長 152バイト
 1レコード目 ヘッダ 150バイト + 改行コード 2バイト
 2レコード目 明細  150バイト + 改行コード 2バイト
 3レコード目 明細  150バイト + 改行コード 2バイト
 4レコード目 ヘッダ 150バイト + 改行コード 2バイト
 …
 という感じです

ACCESSのインポートでは、各レコード毎で違う項目の為、インポートエラーになってしまいます。
そこで、

Q1.テキストファイルの読み方について

私は、Line input の命令で読込みをしてみました。これで良いんでしょうか?
他に Input や Get 命令等色々有りますがどれを使ったら委員でしょうか?

Q2.フィールドの区切り方について
Line input の方法で読込みは出来たかのように感じたのですが、フィールドを区切る際に
Mid関数を使っていましたが、漢字項目の所から先で、桁ずれが発生しました。
理由は、漢字のフィールド30バイト分(15文字分)の所に、途中まで2バイト文字で途中から1バイトのスペースが入っていた為
このような時は、Midb関数を使えが良いと思いましたが。
漢字の次のフィールドで正しく取り込めず、文字化けのようになってしまいます。

総合的にテキストファイルをどの様に読込みして、フィールドの区切りをどうしたら良いでしょうか?
アドバイス下さい、宜しくお願いします。
#5742-0
RE#5735:テキストファイルの読み方について
> Q1.テキストファイルの読み方について

実際にやったことはないけど提案です。
ヘッダか明細かは、識別コードがありますよね?
別々にテーブルを作り、そのコードを見てどちらかのテーブルに振っては?
Typeを2つ作ればできると思いますけど。
あとでヘッダと明細を合わせるための伝票番号(ありそうですよね)なども、双方に
持たせましょう。
#5759-0
お礼RE#5735:テキストファイルの読み方について
Reiさん、みゃおさん、アドバイスありがとうございました。
Midの使用方法がきっと私が理解できていないのでしょうか?
うまく行きませんでした。
結局のところ、こんな風に処理を行って見ました。
  G_File_size = FileLen("c:\txt.dat")
  ReDim temp(0 To G_File_size)
  Set RS1 = CurrentDb.OpenRecordset("ヘッダ", dbOpenDynaset)
  Set RS2 = CurrentDb.OpenRecordset("明細", dbOpenDynaset)
  Open "c:\txt.dat" For Binary As #1
  temp = InputB(G_File_size, #1)
  n = 0
  End_sw = 0
 Do Until End_sw = 1
     If n >= G_File_size _
          Then
             End_sw = 1
     End If
'レコードの判断(ヘッダ Or 明細)
     Select Case StrConv(MidB(temp, 5 + n, 1), vbUnicode)
          Case "h"  'ヘッダの書きこみ
            RS1.AddNew
              RS1![IDh] = StrConv(MidB(temp, 1 + n, 4), vbUnicode)
              RS1![レコード区分h] = StrConv(MidB(temp, 5 + n, 1), vbUnicode)
            RS1.Update
          Case "d" ' 明細の書きこみ
            RS2.AddNew
              RS2![IDm] = StrConv(MidB(temp, 1 + n, 4), vbUnicode)
              RS2![レコード区分m] = StrConv(MidB(temp, 5 + n, 1), vbUnicode)
              RS2![出荷日m] = StrConv(MidB(temp, 6 + n, 8), vbUnicode)
         RS2.Update
          Case Else '処理なし
     End Select
     n = n + 152
  Loop

みゃおさんの考えた方法も質問前にやってみたのですが、Lineinputの所で型不一致のエラーに
なってしまったものでうまく処理できませんでした。
きっと、私の知識不足が大きな原因だとは思いますが…。

もう少し勉強したいと思います。本当にありがとうございました。
#5767-0
RE#5759:お礼テキストファイルの読み方について
> Midの使用方法がきっと私が理解できていないのでしょうか?
> うまく行きませんでした。
> 結局のところ、こんな風に処理を行って見ました。

コードはありがたいのですが、なにかうまくいかないんでしょうか?
「どうしたいのに、これがうまくいかない。」と明示して下さい。
レスがつきやすいと思います。

>   G_File_size = FileLen("c:\txt.dat")
>   ReDim temp(0 To G_File_size)
>   :
>   Open "c:\txt.dat" For Binary As #1
>   temp = InputB(G_File_size, #1)

ファイルの内容をTempにセットしたいんですよね。
これでTempには思ったように内容がありますか?
Tempって配列なのに(ReDimがあるのでそうですよね?)、
上記の以下のコードにはそのように見えないんですが、
このへんの考えはどうなってます?

> みゃおさんの考えた方法も質問前にやってみたのですが、Lineinputの所で型不一致のエラーに
> なってしまったものでうまく処理できませんでした。
> きっと、私の知識不足が大きな原因だとは思いますが…。

Line InputをHelpで見ました?使用例もあるんですが。
あせりは禁物です。わかる部分からじょじょにコードを増やされては如何でしょうか。
そのほうがわからない点が明確になってくると思いますよ。
このページと関連する記事:
#110-3可変長のファイルをどんな風に読込めばいいのでしょう2001-10-17(水) 06:20
#17194-0ファイルの扱いについて教えて下さい。2000-12-19(火) 10:51
#12759-0元の文章を変更せずに CSVファイルを作る方法2000-01-07(金) 14:26
#20782-0バイナリーモードでファイルを読むには2001-05-09(水) 18:13
#21351-0読み出しの時間2001-06-14(木) 07:00
#110-0可変長のファイルをどんな風に読込めばいいのでしょう2001-10-17(水) 15:20
#20796-0ファイルにヘッダを付けて・・・2001-05-10(木) 00:27
#591-0おしえてください2002-04-14(日) 15:36
#6659-0VB5 お願いします2000-03-14(火) 01:06
#2766-3RANDAMファイル2002-09-06(金) 01:18
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)