トップ回答者
VBのテキストファイル入出力

質問
回答
-
実現したいことは読み取れます。ただし、初音玲さん、gekkaさんには通じなかったようです。
たしかに勘違いの可能性が高そうです(汗
「VB完全初心者」という言葉を見てリダイレクトは無いだろうという先入観があったのと、普段はパイプの方しか使って無いので"<>”を完全に失念してました。
Sub Main() Try If Console.KeyAvailable Then End If Console.Error.WriteLine("リダイレクト入力されていません") Return Catch ex As InvalidOperationException 'リダイレクト入力されている場合このエラー End Try Dim lineNumber As Integer = 1 Dim line As String Do Until Console.In.Peek = -1 line = Console.In.ReadLine() Console.Out.WriteLine(lineNumber.ToString("00000:") + line) lineNumber = lineNumber + 1 Loop End Sub
- 回答としてマーク ヘグリン 2009年9月13日 0:19
すべての返信
-
コンソールアプリでプロジェクトを作成して、Sub Main()のところに以下のコードを貼りつけ。
Sub Main() '引数を取得する Dim args() As String = System.Environment.GetCommandLineArgs() If (args.Length >= 3) Then '引数が2個以上あれば 'Dim exeFileName as String = args(0) '0番目は実行ファイルパスになっている Dim InText As String = args(1) '入力ファイルのパスを取得 Dim OutText As String = args(2) '出力ファイルのパスを取得 Console.WriteLine("読み込みファイル:" + InText) Console.WriteLine("書き込みファイル:" + OutText) Dim input As System.IO.StreamReader = Nothing Dim output As System.IO.StreamWriter = Nothing Try '途中でエラーが発生した時の処理 '入力ファイルをテキスト読み込みで開く。文字のエンコードはOS規定のsjis input = New System.IO.StreamReader(InText, System.Text.Encoding.Default) '出力ファイルテキスト書き込みで開く(新規作成もしくは上書き)。文字のエンコードはOS規定のsjis output = New System.IO.StreamWriter(OutText, False, System.Text.Encoding.Default) Dim line As String Dim lineNumber As Integer = 1 Do Until input.EndOfStream 'ファイルの最後になるまで繰り返し実行 line = input.ReadLine() '1行分読み込む output.WriteLine(lineNumber.ToString("00000:") + line) '行頭に行番号を追加して読み込んだ行を書き込む lineNumber = lineNumber + 1 Loop Catch ex As System.IO.IOException 'パスが異常だったりしてファイルが開けなかった場合に実行される Console.ForegroundColor = ConsoleColor.Red Console.Error.WriteLine("ファイルを開けませんでした") Finally '後始末 If (input IsNot Nothing) Then input.Close() '開いたファイルを閉じる End If If (output IsNot Nothing) Then output.Close() '開いたファイルを閉じる End If End Try End If End Sub
-
佐祐理 さんが指摘されているように、現状の回答は ヘグリン さんが実現したいことへの回答か分かりません。
まずは、そこを確かにするべきではありませんか?
(例:スペースがないので、args ではきちんと分割されていない。コマンドプロンプトから実行すると、リダイレクトと認識されるので、args には全く入らない)VBで作成するプログラムで、次のような実行方法でテキストファイルを入出力したいのですが
どのような方法(コーディング)がありますか?
vbprog.exe <in.txt>out.txtこの実行方法というのは、どのようなものでしょうか?
1.ショートカットファイルのプロパティのリンク先の末尾を "vbprog.exe <in.txt>out.txt" となるように修正してから、ショートカットを実行
2.コマンドプロンプトで "vbprog.exe <in.txt>out.txt" を打ち込んで実行
3.バッチファイルで "vbprog.exe <in.txt>out.txt" と書き込んで、そのバッチファイルを実行
4.プロジェクトのプロパティのデバッグタブ "コマンド ライン引数" に "<in.txt>out.txt" を入力して実行
※1番と4番の場合、スペースがあるかどうかも極めて重要です。スペースがなく、詰めて "<in.txt>out.txt" と書くのでしょうか?
このほかの実行方法もあるかもしれません。どういった場所で "vbprog.exe <in.txt>out.txt" と書くのか教えて下さい。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。 -
実現したいことは読み取れます。ただし、初音玲さん、gekkaさんには通じなかったようです。
コマンドプロンプト(スタートメニューの アクセサリ → コマンドプロンプト にあります)に書くのでしょう。バッチファイルでも同じことです。
またコマンドプロンプトはスペースで区切らなくても認識し、分解します。最悪 vbprog<in.txt>out.txt でも認識します。
その上で、このようにプログラムを起動するとin.txtの内容をConsole.Inから読み出せます。またConsole.Outに書いた内容(もしくはConsole.WriteLineなど)はout.txtに書き込まれます。
VB.NET特有のMyなんたらがあるかもしれないですが、それについては私は知りません。
この辺りを説明しているドキュメントが見あたりませんでした。コマンド リダイレクト演算子 を使用する ぐらいでしょうか。- 回答の候補に設定 AzuleanMVP, Moderator 2009年9月12日 10:36
-
-
実現したいことは読み取れます。ただし、初音玲さん、gekkaさんには通じなかったようです。
たしかに勘違いの可能性が高そうです(汗
「VB完全初心者」という言葉を見てリダイレクトは無いだろうという先入観があったのと、普段はパイプの方しか使って無いので"<>”を完全に失念してました。
Sub Main() Try If Console.KeyAvailable Then End If Console.Error.WriteLine("リダイレクト入力されていません") Return Catch ex As InvalidOperationException 'リダイレクト入力されている場合このエラー End Try Dim lineNumber As Integer = 1 Dim line As String Do Until Console.In.Peek = -1 line = Console.In.ReadLine() Console.Out.WriteLine(lineNumber.ToString("00000:") + line) lineNumber = lineNumber + 1 Loop End Sub
- 回答としてマーク ヘグリン 2009年9月13日 0:19