VB6.0での文字列ファイル書き込みとは?

このQ&Aのポイント
  • VB6.0を研修中の新人が、テキストファイルにランダムアクセスをして半角全角混じりの文字列を書き込むコードを考えています。自宅でコードをどのように書くかある程度決めておきたい状況です。
  • メモ帳.txtに文字列を書き込むと「■ 」が付いてしまいますが、これを取り除いて記述される方法はありますか?
  • VB6.0で書かれたコードは、テキストファイルに5つの文字列をランダムアクセスします。文字列の長さを指定する関数も用意されています。
回答を見る
  • ベストアンサー

VB6.0 文字列のファイル書き込み

こんにちは。 VB6.0を研修中の新人です。 テキストファイルにランダムアクセスをし半角全角混じりの文字列を書き込むコードを考えています。 連休中は会社に入れないので自宅でコードをどのように書くかある程度決めておきたいです。 ■ あいうえお ■ カキクケコ ■ サシスセソ   (サシスセソは半角です)   ■ タチツテトはひ (タチツテトは半角です) メモ帳.txtに文字列を書き込むと上記のように書き込まれます。 これは見た目が悪いので下記のように"■ "がないように書き込むことは無理でしょうか。 あいうえお カキクケコ サシスセソ    (サシスセソは半角です) タチツテトはひ  (タチツテトは半角です) いま書いたコードは下記のとおりです。 Public Sub Main() WriteFile End Sub '書き込む関数 Public Sub WriteFile()   Dim i As Integer   Dim str As String   Open "C:\メモ帳.txt" For Random As #1 Len = 14   Do While < 5     Select Case i       Case 1 str="あいうえお"       Case 2 str="カキクケコ"       Case 3 str="サシスセソ"       (サシスセソは半角です)       Case 4 str="タチツテトはひふへほ" (タチツテトは半角です)     End Select     strNagasa(str,10) + vbCrlf     Put #1,i,str     i = i + 1   Loop   Close #1 End Sub '文字列をレコードの長さに合わせる関数(いまの場合は10バイト) 'Nagasaが"10"の場合 'strが "サシスセソ" なら "サシスセソ" に半角スペースを5個詰めて返す。 'strが "タチツテトはひふへほ" なら "タチツテトはひ" の9バイトで文字列を切って半角スペースを1個詰めて返す。 Public Function StrNagasa(str As String,Nagasa As Integer) As String   ...   省略(完成済み)   ... End Function

noname#123613
noname#123613

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>"■ "がないように書き込むことは無理でしょうか。 ランダムアクセスファイルでは先頭にレコード長が付くので無理です。 第一、テキストファイルをランダムアクセスするという発想が理解できません。 普通、テキストファイルはシーケンシャルアクセスしかしないものです。 VBのランダムアクセスはVBのランダムアクセスでしか入出力しないことを前提とするものだからで、メモ帳で見ておかしいのは当然です。 >文字列をレコードの長さに合わせる関数 Open時にレコード長を指定しているので、パディングは原則として不要です。 尚、文字数≠バイト数です。Lenは文字数を返す関数でバイト数ではありません。VB内では文字はUnicodeであらわされるので、全て1文字=2バイトです。LenBはこのバイト数を返すので、常にLenの戻り値の2倍です。 Shift-JISでのバイト数が知りたい場合はWindowsAPIのlstrlen(文字列中にChr(0)が無いことが前提)を使うと便利ですが、 本格的にやるにはWindowsAPIの変換関数を使うか、ADODBのStreamオブジェクトで変換します。

noname#123613
質問者

お礼

やはり無理なんですね。 これからAccess、SQLSever、どれに接続するかはまだ決まってませんが、ファイル処理の理解もかねて今のところテキストファイルでデータベースの登録、更新、削除などをやってます。 Input,Output,Appendモードをつかったシーケンシャルアクセスや構造体をつかったランダムアクセスもやりました。では文字列でランダムアクセスをやったらどうなるかを考えてみました。 ヘルプを見ると可変長文字列は2バイトの制御コードがつくと書かれていたので多分"■ "はそれだろうと思っていました。 レコード長だったんですね。 ありがとうございました。 ちなみに、あまりダラダラ書きたくなかったので省略しましたが、文字列をレコードの長さに合わせる関数はStrConv(str,vbFromUniCodo)で文字コードを変換してからMidB(str,1,Nagasa)で切り取りStrConv(str,vbUniCodo)で戻して最後の文字がvbNullCharだったらスペースを埋めるという処理をしています。

関連するQ&A

  • select case 大文字小文字を区別しないよ

    select case 大文字小文字を区別しないようにするには? Sub test01() Dim str As String str = "A" Select Case str Case "a" MsgBox "aです" Case "A" MsgBox "aです" End Select End Sub これだと、半角全角がヒットしないのはなんとなくしょうがないかな、と思うのですが 大文字小文字がちがくてもヒットさせるにはどうすればいいですか? Sub test01() Dim str As String str = "A" Select Case str Case "a", "A" MsgBox "aです" End Select End Sub とするしかないでしょうか? 大文字小文字区別なく評価する方法があれば教えてください。よろしくお願いします。

  • VBA(Excel2003)で文字列の切り出し

    下のプロシージャーで全角半角混じりの文字列を切り出し、別の文字列で結合しようと思いますがうまくいく場合といかない場合があります。 イミディエイト・ウィンドウ上とCell上で動作が違います。 Cell上でうまく表示させるにはどうしたらいいでしょうか? Sub Test() Dim myString(2) As String Dim i As Integer myString(0) = "airueo" myString(1) = "かきくけこ" myString(2) = "さシすせそ" For i = 0 To 2 Debug.Print MidMbcs(myString(i), 1, 5) & "...テスト" Cells(i + 1, 1).Value = MidMbcs(myString(i), 1, 5) & "...テスト" Next i End Sub Function LenMbcs(ByVal str As String) LenMbcs = LenB(StrConv(str, vbFromUnicode)) End Function Function MidMbcs(ByVal str As String, start, length) MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode) End Function

  • 【vba】「CStr」と「Str」は同じ意味ですか?

    Sub 数値を文字型に変更() Dim i As Long Dim moji As String i = 1 moji = CStr(i) moji = Str(i) End Sub 上記のコードで得られる結果は同じです。 "1"になります。 「CStr」でも「Str」でも数値を文字列に変換しています。 ということは「CStr」でも「Str」は同じなのですか? しかしコードの表示色が 「CStr」→キーワード 「Str」→識別子 です。 これが違うと言うことは何かが違うのでしょうか?  よろしくお願いします。

  • VBAでワイルドカードを使った文字列検索

    初めて投稿いたします。 環境は、WinXP Access2000 下記のVBAモジュールで、文字列検索がヒットしません。 数字の比較でヒットするのはナゼでしょうか? ちなみに、変数に導入したのは、全角半角どちらも入れてみました。 この疑問・・・どなたか解決お願いします。 Sub TEST() Dim AAA As String Dim BBB As String Dim YYY As String AAA = "0" BBB = "2" YYY = AAA & BBB Select Case YYY Case "0*" MsgBox "ココを通り過ぎないで!" Case "15" MsgBox "やったね" Case Is > 0 MsgBox "なぜかココでヒットします??" End Select End Sub

  • 最終列の列番号を列文字に変換することはできますか?

    例えばaaaがある列を探し、その列番号は4で列文字がDですが、 列番号から列文字をvbaで取得する方法はありますか? Sub Sample() Dim i As Long Dim Colmoji As String i = Rows(1).Find(What:="aaa", LookAt:=xlWhole).Column Colmoji = i 'ここで列文字に変換したい MsgBox i & "の列文字は" & Colmoji & "です" End Sub このようなコードを作ってみたのですが列文字に変換する方法がわかりません。

  • VBScriptである文字列に半角文字が含まれているかどうか調べる方法について

    VBScriptである文字列に半角文字が含まれているかどうか調べる方法について、ネットで調べてソースコードを拾ってきたのですが... IFの条件でなぜ全角、半角が判断できるか分かりません。教えてください。お願いします。 iLen = Len(str1) iLenByte = 0 '--- 文字列のバイト数 For i = 2 To iLen strField = Mid(str1, i, 1) iCode = Asc(strField) If iCode > 0 Then '--- 半角文字 Else '--- 全角文字 End If Next

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

  • テキストファイルを読み込んで文字の動的表示をする方法を教えてください。

    Visual basic2005 Express Editionで、文字を動的に表示する方法は、 TextBoxとTimerをFormに貼り付けて、Timerのプロパティの動作の項目のEnabledをTrueにしてコードに Public Class Form1 Private hyouji As String = "テスト" Private nagasa As Integer = 0 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick TextBox1.Text = Microsoft.VisualBasic.Left(hyouji, nagasa) nagasa += 1 If nagasa > Len(hyouji) Then nagasa = 0 End If End Sub End Class と入力すると出来ますが、テキストファイルを読み込んで文字を動的に表示する方法が分かりません。 教えてください。よろしくお願いします。

  • 半角カタカナのみ全角にするには

    http://bekkoame.okwave.jp/qa8426331.html を参考にvbaコードを作っています。 "あああイイイ"(「イイイ」のみ半角カタカナ) を "あああイイイ" にしたいのですが、 Sub Macro01() Dim str置換前 As String '置換前の文字列 Dim str置換後 As String '置換後の文字列 Dim i As Integer str置換前 = "あああイイイ" str置換後 = str置換前 For i = 31850 To 31936 str置換後 = Replace(str置換後, StrConv(Chr(-i), vbNarrow), Chr(-i)) Next i MsgBox str置換前 MsgBox str置換後 End Sub を実行すると、 「あああ」が全角カタカナになり、「アアアイイイ」になってしまいます。 For i = 31850 To 31936 の部分に原因があるのかな、とは思いますが、 For i = 31850 To 31936の意味がよくわからないままコピペで使ってしまいました。 多分文字コードの数値だと思うのですが、どう変更すれば、ひらがなは除外されますか? よろしくお願いします。

  • 左から3文字だけ全角にし残りの6文字は半角のままにしたい。

    全部半角の"123456789"と言う文字列があります。 これを"123456789"にしたいのですがうまくいきません。 Sub 左から3文字目までを全角にする() Dim 文字列 As String 文字列 = "123456789" 文字列 = StrConv(Left(文字列, 3), vbWide) End Sub これを実行すると 文字列は"123"になってしまいます。 "123456789"にするにはどうすればいいのでしょうか? よろしくお願い致します。

専門家に質問してみよう