• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB Input#でstringを読込む時の区切り)

VB Input#でstringを読込む時の区切り

このQ&Aのポイント
  • VBのInput#でテキストファイルの中の単語をString型変数に読み込むときの、1項目の区切りを教えてください。
  • 空白を区切りとして使用する場合、文字列の一部とみなされて切り替えてくれません。
  • 最終の手段として改行を区切りとして使用し、テキストファイルの見栄えを優先することもできます。

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

  • ベストアンサー
  • uruz
  • ベストアンサー率49% (417/840)
回答No.1

Input#はWrite#で書き出したファイル・フォーマットに対して読込をサポートします、従ってデータの区切りはカンマ(,)と改行(crlf)が区切りとなります。 1) 1,aaa,bbbb 2) 1 aaa bbbb 3) 1 aaa,bbbb 1)~3)いずれでも希望通りの結果がえられます。 4) 1 aaa bbbb 4)の場合は区切り文字がInput#の扱いとは異なりますのでInput#では希望通りの結果は得られません。 Line Input#で行単位で読込処理をする必要があります。 例 Dim i1 As Integer Dim s1(2) As String Dim InTXT As String Dim AA As Variant Open "sample.txt" For Input As #1 Line Input #1, InTXT AA = Split(InTXT, " ") i1 = CInt(AA(0)) s1(0) = AA(1) s1(1) = AA(2)

marriess
質問者

お礼

回答ありがとうございます。 カンマ区切りを使うか、Line Inputを用いてやってみようと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBのFileOpenとInputというコマンドをVC#で使えませんか?

    例:(VB)   FileOpen(2, "test.txt", OpenMode.Input)   Dim i, j, p, r, t As Integer Dim y, T1 As Double Dim x As Double Dim S1() As Double Dim S2() As Double Try Input(2, y) Input(2, T1) For p = 1 To Emax Input(2, x(p)) Next For t = 1 To Tmax Input(2, S1(t)) Next For t = 1 To Tmax Input(2, S2(t)) Next Catch ex As Exception FileClose(2) Exit Sub End Try

  • 文字コードを指定して・・

    妙な質問になってしまい申し訳ないのですが、変数内に入っている文字コード情報を使ってテキストに書き出す所がうまくいかず苦しんでおります。。 文字で説明するよりソースを見て頂いた方が何がしたいのか分かって頂けるかもしれません。。本当に初歩的な質問で申し訳ないですが、宜しくお願いいたします。 Dim aaa As String = "iso-2022-jp" dim bbb As String = "こんにちは" Dim txt As New StreamWriter("test.txt", False, system.Text.Encoding.GetEncoding(aaa)) txt.Write(bbb) txt.Close() GetEncoding(aaa)としたら、書き込めないと言われ、GetEndoding("aaa")とすればもちろん、そんなエンコードはないと言われてしまい困ってます。。VB.NETです。

  • VB6 「Line Input」でのリークについて

    VB6での「Line Input」命令使用時のメモリリークについて教えて下さい。 1分毎に3600行のCSVファイルを読み込むプログラムを作成しています。  (CSVファイルは1行500文字程度) 以下の【パターン1】は作成したプログラムの1部ですが、 (1)を3600回ループ時にパフォーマンスモニタでの「Private Bytes」が増加してしまいます。   (1ループ毎に増加せず、数十回ループする毎に増加します。) 試しに【パターン2】を作成し、CSVファイルはオープンのみ行い、 読み込みは行わずに、500文字の文字列が入った変数をコピーした場合は、 「Private Bytes」は増加しません。 基本的に違いは(1)と(2)の箇所だけなのですが、 「Line Input」命令の使用方法などで間違っている箇所があるのでしょうか? ご存知の方、教えて下さい。お願いします。 【パターン1】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim FP As Integer 'ファイル番号 (省略) : FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) Line Input #FP, CsvDataBuf(i)     ←(1) i = i + 1 Loop Close #FP : (省略) 【パターン2】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim tempBuf As String Dim FP As Integer 'ファイル番号 (省略) : tempBuf = "~500文字の文字列~" FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) CsvDataBuf(i) = tempBuf       ←(2) i = i + 1 Loop Close #FP : (省略)

  • テキストデータExcel取込時の文字化け、その他

    VBA初心者です。 やりたいことは以下の通りです。 カンマ区切りの文字が記載された.txtデータをExcelファイルに取り込みたいと思っています。 (1)自動でフォルダを開いて手動で任意のテキストデータを選ぶ (2)データを文字 化けなくカンマ区切りでセルごとにExcelに表示 (3)元データの.txtはファイルによって空白行が1行のときもあれば2行のときもありまちまちなので自動で空白行をスキップして呼び込みたい (4)呼び込んだ.txtの内容を元に読み込先のExcelに関数(I列に来るべき.txtのデータを参照してJ列「収支」K列「勝率」が出る)が仕込んであるが、ファイルによってデータの行数が違うため最終行を取得したい 特定の.txtファイルではなくこちらで選べるようにしたいので以下に示したソースの通りGetOpenFilenameで自動でファイルを開いて手動で選べるようにしています。 その際、一部別の漢字に変換されたり、カンマがひとつだけ・に代わっていたり文字化けがあります。 呼び込みたい.txtは空白行が1行あったり、2行あったりするのでそこをスキップして純粋に文字のある行から取り込みたい。読み込み先のExcelには事前に項目を作っているため、空白行をスキップできれば自動的に項目の下にデータが表示されるようになっています。※予め空白のないテキストを呼び込んでテストすると(文字化けは別として)上手くいきました。 (4)は難しくてもせめて(1)~(3)までは自力でできないかと調べていますがうまくいきません。UTF-8をANTI形式に保存しても直ったり直らなかったり、またVBAのADODB.Streamオブジェクト(Microsoft ActiveX Data Objects x.x Library)を試そうとするもファイルパスやターゲットで特定のファイルを指定する部分があり、それを指定しないで使うにはどうすればいいのかがわかりません。 ご査収いただけましたら嬉しいです。 下記はネットのソースを一部直して作成。これを利用してできないでしょうか。 Option Explicit '=================================================================================================== Private Const g_cnsTitle As String = "テキストファイル読み込み" Private Const g_cnsFilter As String = "全てのファイル (*.*),*.*" Sub Txt読み込み() Dim varFileName As Variant Dim intFree As Integer Dim strRec As String Dim strSplit() As String Dim i As Long, j As Long varFileName = Application.GetOpenFilename(FileFilter:="txtファイル(*.txt),*.txt", _ Title:="txtファイルの選択") If varFileName = False Then Exit Sub End If intFree = FreeFile '空番号を取得 Open varFileName For Input As #intFree 'txtファイルをオープン i = 0 Do Until EOF(intFree) Line Input #intFree, strRec '1行読み込み i = i + 1 strSplit = Split(strRec, ",") 'カンマ区切りで配列へ For j = 0 To UBound(strSplit) Cells(i, j + 1) = strSplit(j) Next '配列をそのまま入れる方法も、ただし全て文字列として入力される 'Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit Loop Close #intFree End Sub

  • VB 配列の内容をファイルに書き込む

    VB2008を使用しています。 stg_bitという配列に一文字ずつ「abc・・・」 のように入っているものを、テキストファイルに出力したいのですが・・・ stg_bitという配列の内容をファイルに書き込みたいのですが、 うまくいきません。 ご教授お願いします!! Dim i As Integer Dim stg_str As String Dim Writer As New IO.StreamWriter("C:sample.txt") Writer.WriteLine(stg_bit) Writer.Close()

  • Access 標準モジュール 条件分岐について

    お世話になります。 先日似たような質問をさせて頂き、解決したのですが改めて 新たな不明点が発生してしまい、依頼されている内容の為、恥ずかしながら質問させて 頂きたいと思います。 長くなってしまうかもしれませんが、できるだけ詳細に書きたいと思いますので よろしければご協力おねがいします。 行いたい内容として、テキストファイルを利用して、Accessのテーブルに希望の内容を 書き込むことを目的としているのですが、個人でも本やネットを利用して、調べたりしているんですが、現状の自分の理解度を超えており、質問させて頂きたいと思います。 ご面倒かけ申し訳ありませんが、よろしくお願いいたします。 <テキストファイル> AAA 1000 2000 3000 5000 BBB 3 2000 5000 1500 3000 1000 1500 AAA 300 800 1500 1000 BBB 4 1000 3000 1000 2500 2000 1300 1500 3000 BBB 2 5000 2000 2000 1000 上記のようなテキストファイルがあるのですが、これをAccessのテーブルへaddnewとupdateを 利用して書き込みを行いたいと思っています。 <テーブル構成> ID       オートナンバー フィールド1 テキスト型 連番     数値型 このテーブル構成に対して、標準モジュールを利用して、下記のように加工したいです。 多少文字がずれてしまっていたら申し訳ありません。 <実行後のテーブル>  ID     フィールド1   連番    1     1000 2000     1  2     3000 5000     1   3     2000 5000     2  4     1000 1500     2  5      300 800     3  6     1500 1000     3   7     1000 3000     4   8     1500 3000     4   9     5000 2000     5  10     2000 1000     5 ポイントとしまして (1) AAAで始まる行については、2行に分ける    1000 2000 3000 5000 数字の間は、半角のスペース一つ分空いています。    Line Inputとsplitを利用して、配列で利用したいと思っています。 (2) BBBで始まる行については、最初の行と最後の行のみを利用します。     間にあるデータは利用しません。 (3) AAA・BBBの半角スペースの横にある数字は、次の行から何行データがあるか    表しています。 (4) AAAは、必ず2行になります。BBBは、最低2行になります。 (5) 連番については、AAA ・BBBともに、2行が同じ番号になります、    とりあえずできている内容を記載しておきます。 まだ条件分岐が全然できていません。 途中段階ではありますが、間違っている点・追加した方がいい点等ありましたら 変更していただいても大丈夫です。 Sub test() Dim rsd As New ADODB.Recordset Dim strLine As String Dim arraystr As Variant Dim iNum1 As Long Dim iNum2 As Long Dim iRecCnt As Long   Dim i As Long 'カレントファイルを開く Open CurrentProject.Path & "\abcde.txt" For Input As #1 iNum1 = 0 iRecCnt = 0 Const sTable As String = "test1" 'abcdeテーブルデータ削除 Dim sSql As String sSql = "DELETE * FROM " & sTable & ";" CurrentProject.Connection.Execute sSql 'abcdeテーブルオープン rsd.Open sTable, CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic Do While Not EOF(1) 'テキスト データを一行ずつ読込 Line Input #1, strLine 'Nullを区切りとして配列をarraystrへ arraystr = Split(strLine, " ")   Loop End Sub 以上 よろしくお願いいたします

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • なぜString型ではだめなのか

    GetOpenFilename メソッドのヘルプに記載してある fileToOpen = Application _ .GetOpenFilename("テキスト ファイル (*.txt), *.txt") If fileToOpen <> False Then MsgBox "選択されたファイル : " & fileToOpen End If というマクロを実行したいのですが変数の宣言をしているため 「fileToOpen」の部分がエラーになってしまいます。 なので Dim fileToOpen As String を付け加えましたが 次は 「If fileToOpen <> False Then」 でエラーになります。 なので Dim fileToOpen As Variant にしたらうまくいきました。 しかしVariant型は使わないほうがいいと教わったのですが この場合はこれしかないのでしょうか? またなぜString型ではエラーになるのでしょうか? よろしくお願いします。

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • 【VB.Net】バイト型配列に読み込んで改行区切り

    教えて下さい。 ファイルをバイト型配列に読み込んで、ある固定長に区切(改行)って出力したいです。 以下簡単にサンプルとして作っているのが以下です。 【読み込みファイル.txt】 ---------------------------------------------------------------------------------- AB ---------------------------------------------------------------------------------- このテキストファイルの内容(byte型では、"41 42")を1バイトづつに改行で区切りたいです。 【VB.Net】 ---------------------------------------------------------------------------------- Dim BUFSIZE As Integer = 1 ' 1バイトづつ処理 Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ Dim readSize As Integer ' Readメソッドで読み込んだバイト数 Dim srcName As String = "C:\Temp\読み込みファイル.txt" ' 読み込みファイル名 Dim dstName As String = "C:\Temp\書き込みファイル.txt" ' 書き込みファイル名 Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read) Using dest As New FileStream(dstName, FileMode.Create, FileAccess.Write) While True ' 1バイト読み込み readSize = src.Read(buf, 0, BUFSIZE) ' 読み込むものが無ければ終了 If readSize = 0 Then Exit While ' 改行いれたい部分(動かないけど、、、) buf = (0D,0A) ' 書き込み dest.Write(buf, 0, BUFSIZE) End While End Using End Using ---------------------------------------------------------------------------------- ↓ 理想の処理後 【書き込みファイル.txt】 ---------------------------------------------------------------------------------- A B ---------------------------------------------------------------------------------- 重要なのはバイト型で処理を行いたいです。(文字列ではない) すいませんがよろしくお願いします。

このQ&Aのポイント
  • DCP-J968Nでドライバーのインストールができない問題について相談します。
  • WIFI接続で印刷できていたが、WIFIをポケットWIFIに変更したところ、パソコンからプリンターが認識できなくなり、ドライバーのインストールができません。
  • BROTHERのHPのサポート&ダウンロードからインストールを試みていますが、製品選択のステップでプリンターが認識できず、進めません。
回答を見る

専門家に質問してみよう