- ベストアンサー
データ挿入方法
先日もお世話になりました。 いつもありがとうございます。 5ケタのコードと市町村名が書いたファイルがあります。 -------------------------------- 例)11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 -------------------------------- VBで別のテキストファイルの特定の場所へ全部まとめて挿入するにはどうすればよいですか? 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
1.適当な名前(仮にOut.txt)のファイルを作る 2.別のテキストファイルを開く 3.特定に場所まで別のファイルを読み出し、Out.txtに書き出す。 4.市町村コード対応ファイルを開いて、Out.txtに書き出す。 5.別のファイルを最後までOut.txtに書き出す 6.別のファイルを削除する。 7.Out.txtを別のファイルの名前にリネームする
その他の回答 (4)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
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
お礼
参考になりました。これから、勉強します。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>3の特定の場所までというのが、ちょっと分からないのですが… 質問文で書かれている「特定の場所」のことです。 あなたが、わからなかったら誰にもわかりませんデス。
- fortranxp
- ベストアンサー率26% (181/684)
1.現行のテキストファイルにAppendする。 2.Excelに読み込んでソートする。 3.txt形式で保存する。 どうでしょう?
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>別のテキストファイルの特定の場所へ全部まとめて挿入するにはどうすればよいですか? うーん。イメージがつきません。 1.[市町村.txt] レイアウト ------------------------ 11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 ------------------------ 2.[別のテキストファイル.txt] レイアウト ------------------------ <イメージができません> ------------------------ 3.[《別のテキストファイル.txt》or《新規の別のファイル.txt》?] レイアウト ------------------------ <2のレイアウトがわからないので、イメージができません> <特定の場所へ全部まとめて挿入の意味がわからないので、イメージできません> ------------------------ ※2のファイルから2のファイルを更新?それとも、新たな3ファイルを作成? ※2ファイルイメージ ※1と2のファイルの連携の仕方 ※1+2のファイル結果イメージ !!重要なのは、処理前と処理後のレイアウトです!! 以上の情報が得られたら、回答が出てくると思います。 さらに今、どこまで出来ているのか、ソースの公開があれば、的を絞った答えが得られると思いますよ。
補足
下記のテキストファイルの内容をHTMLのOPTIONの項目にしたいのです。 すいません。説明不足で… ==テキストファイル========== 11111 大阪府大阪市北区 22222 和歌山県橋本市 33333 奈良県大和郡山市 ============================ ==HTMLファイル========== : : <OPTION> ○○○○○ ××××× △△△△△ </OPTION> : : ============================ すいません。せっかくご回答いただいてたのに、遅くなりました。
補足
3の特定の場所までというのが、ちょっと分からないのですが… すいません。もう少し詳しくお願いします。