• ベストアンサー

データ挿入方法

先日もお世話になりました。 いつもありがとうございます。 5ケタのコードと市町村名が書いたファイルがあります。 -------------------------------- 例)11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 -------------------------------- VBで別のテキストファイルの特定の場所へ全部まとめて挿入するにはどうすればよいですか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

1.適当な名前(仮にOut.txt)のファイルを作る 2.別のテキストファイルを開く 3.特定に場所まで別のファイルを読み出し、Out.txtに書き出す。 4.市町村コード対応ファイルを開いて、Out.txtに書き出す。 5.別のファイルを最後までOut.txtに書き出す 6.別のファイルを削除する。 7.Out.txtを別のファイルの名前にリネームする

sunny65
質問者

補足

3の特定の場所までというのが、ちょっと分からないのですが… すいません。もう少し詳しくお願いします。

その他の回答 (4)

回答No.5

HTMLソースなら、もっといいと思う方法があるのですがねー DB化しちゃうとか まだ言語始めたばかりなのでしょうが、極力過去の履歴を見ましょうねー 履歴のソースを理解するだけで、スキルもあがりますよー 開く 分割 結合 探す 挿入 保存 今回これらの全てを利用しておりますが、履歴には個々のパーツ単位で存在しています。 それらを組み合わせるだけです。 Test.html ---------------------------------------------------- <HTML> <HEAD> <TITLE>テスト</TITLE> </HEAD> <BODY> <select name="select"> </select> </BODY> </HTML> ---------------------------------------------------- data.txt ---------------------------------------------------- 11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 ---------------------------------------------------- 以下ソース Option Explicit Sub Test()   Dim strHTML As String   Dim strData As String   Dim strBuff As String      strHTML = "c:\Test.html"   strData = "c:\data.txt"      'コンボボックスデータを挿入したHTMLの取得を行う   If Not GetHTML_InsertCombo(strHTML, strData, strBuff) Then     Exit Sub   End If      MsgBox "取得したHTMLソース" & vbCrLf & vbCrLf & strBuff, vbInformation      'データを書く   If Not WriteFile("c:\aaaa.html", strBuff) Then     Exit Sub   End If      MsgBox "完了" End Sub 'コンボボックスデータを挿入したHTMLの取得を行う Private Function GetHTML_InsertCombo(ByVal inHTML As String, ByVal inData As String, Optional otHTML As String) As Boolean   Dim strBuffHTML As String   Dim strBuffData As String      Dim lngPntSelect  As Long   Dim strComboData  As String      '(1)戻りHTMLの初期化   otHTML = ""      '(2)HTML読み込み   If Not ReadFile(inHTML, strBuffHTML) Then     MsgBox "HTML取得失敗", vbCritical     Exit Function   End If   MsgBox "HTMLソース" & vbCrLf & vbCrLf & strBuffHTML, vbInformation      '(3)DATA読み込み   If Not ReadFile(inData, strBuffData) Then     MsgBox "データ取得失敗", vbCritical     Exit Function   End If   MsgBox "データ" & vbCrLf & vbCrLf & strBuffHTML, vbInformation      '(4)コンボデータ挿入位置を取得   If Not FindComboPoint(strBuffHTML, lngPntSelect) Then     MsgBox "コンボデータ挿入位置不明", vbCritical     Exit Function   End If   MsgBox "データ挿入位置" & vbCrLf & vbCrLf & (lngPntSelect + 1) & "文字", vbInformation   '(5)コンボデータを作成   If Not CreateComboData(strBuffData, strComboData) Then     MsgBox "コンボデータ作成失敗", vbCritical     Exit Function   End If   MsgBox "挿入するデータ文字" & vbCrLf & vbCrLf & strComboData, vbInformation   '(6)コンボデータを挿入して返す   otHTML = _       Left$(strBuffHTML, lngPntSelect) _      & vbCrLf _      & strComboData _      & Mid$(strBuffHTML, lngPntSelect + 1)   GetHTML_InsertCombo = True End Function 'コンボデータを作成 Private Function CreateComboData(ByVal inBuffData As String, Optional otData As String) As Boolean   Dim varRecord    As Variant   Dim strWk      As String   Dim i        As Integer      Dim strCode     As String   Dim strData     As String      Dim strAryBuff()  As String   Dim intCount    As Integer   '戻りバッファの初期化   otData = ""      '入力データが何もない   If (Trim$(inBuffData) = "") Then     Exit Function   End If      'データを改行で分割する   varRecord = Split(inBuffData, vbCrLf)      'データレコード数処理を行う   For i = LBound(varRecord) To UBound(varRecord)     'iレコード目を取得     strWk = varRecord(i)          'レコードから[コード][データ]が取得できたときだけ、以下を処理     If SplitCodeData(strWk, strCode, strData) Then       '配列として、コンボ値を記憶       intCount = intCount + 1       ReDim Preserve strAryBuff(intCount - 1)       strAryBuff(intCount - 1) = "<option value=""" & strCode & """>" & strData & "</option>"     End If   Next i      '1件もデータが取れなかった   If (intCount = 0) Then     Exit Function   End If      '配列コンボ値を改行コードで連結して返す   otData = Join(strAryBuff, vbCrLf)      CreateComboData = True End Function '入力レコードをコードとデータへ分解する Private Function SplitCodeData(ByVal inData As String, Optional otCode As String, Optional otData As String) As Boolean   Dim varWk  As Variant   '戻り値の初期化   otCode = ""   otData = ""   'レコードにデータが存在しないとき未処理   If (Trim$(inData) = "") Then     Exit Function   End If      'データは"スペースで区切ってあるものとする(最大でも2分割)   varWk = Split(inData, " ", 2)      '区切った文字列の先頭をコードへセット   otCode = varWk(0)   '区切った文字列の後半が存在していれば、データ側をセット   If UBound(varWk) > 0 Then     otData = varWk(1)   End If      SplitCodeData = True End Function 'コンボデータ挿入位置を取得 Private Function FindComboPoint(ByVal inBuffHTML As String, Optional otPoint As Long) As Boolean   Dim lngWk  As Long   '戻り値の初期化   otPoint = 0      '大文字小文字の区別がいらないように、あらかじめHTMLを大文字にしておく   inBuffHTML = UCase(inBuffHTML)      'HTMLの中から"<SELECT "を探す   lngWk = InStr(1, UCase(inBuffHTML), "<SELECT ")   '見つからなかったら抜ける   If (lngWk = 0) Then     Exit Function   End If      '"<SELECT "以降の">"を探す   lngWk = InStr(lngWk, UCase(inBuffHTML), ">")   '見つからなかったら抜ける   If (lngWk = 0) Then     Exit Function   End If      otPoint = lngWk      FindComboPoint = True End Function 'ファイルを読み込む関数 Private Function ReadFile(ByVal inFilePath As String, Optional otBuff As String) As Boolean   Dim intFile   As Integer   Dim bytBuff()  As Byte   Dim lngLen   As Long      '戻りバッファの初期化   otBuff = ""      'ファイルの存在チェック   If Dir(inFilePath) = "" Then     Exit Function   End If      'ファイルサイズの取得   lngLen = FileLen(inFilePath)      'ファイルの読み込み   intFile = FreeFile   ReDim bytBuff(lngLen - 1)   Open inFilePath For Binary Access Read As #intFile     Get #intFile, , bytBuff   Close #intFile      '変換   otBuff = StrConv(bytBuff, vbUnicode)   ReadFile = True End Function 'ファイルを書き込む関数 Private Function WriteFile(ByVal inFilePath As String, ByVal inBuff As String) As Boolean   Dim intFile   As Integer      'ファイルを書き込む   intFile = FreeFile   Open inFilePath For Output As #intFile     Print #intFile, inBuff,   Close #intFile      WriteFile = True End Function

sunny65
質問者

お礼

参考になりました。これから、勉強します。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>3の特定の場所までというのが、ちょっと分からないのですが… 質問文で書かれている「特定の場所」のことです。 あなたが、わからなかったら誰にもわかりませんデス。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

1.現行のテキストファイルにAppendする。 2.Excelに読み込んでソートする。 3.txt形式で保存する。 どうでしょう?

回答No.2

>別のテキストファイルの特定の場所へ全部まとめて挿入するにはどうすればよいですか? うーん。イメージがつきません。 1.[市町村.txt] レイアウト ------------------------ 11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 ------------------------ 2.[別のテキストファイル.txt] レイアウト ------------------------ <イメージができません> ------------------------ 3.[《別のテキストファイル.txt》or《新規の別のファイル.txt》?] レイアウト ------------------------ <2のレイアウトがわからないので、イメージができません> <特定の場所へ全部まとめて挿入の意味がわからないので、イメージできません> ------------------------ ※2のファイルから2のファイルを更新?それとも、新たな3ファイルを作成? ※2ファイルイメージ ※1と2のファイルの連携の仕方 ※1+2のファイル結果イメージ !!重要なのは、処理前と処理後のレイアウトです!! 以上の情報が得られたら、回答が出てくると思います。 さらに今、どこまで出来ているのか、ソースの公開があれば、的を絞った答えが得られると思いますよ。

sunny65
質問者

補足

下記のテキストファイルの内容をHTMLのOPTIONの項目にしたいのです。 すいません。説明不足で… ==テキストファイル========== 11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 ============================ ==HTMLファイル========== : : <OPTION> ○○○○○ ××××× △△△△△ </OPTION> : : ============================ すいません。せっかくご回答いただいてたのに、遅くなりました。