指定番目の文字を読む込む方法とは?
- ノートブックVISTAを搭載し、VB2008Expressでプロジェクトに挑戦中。しかし、最初から躓いて立ち往生中。
- VB6.0のFileGetChar関数とVB 2008のFileGetChar関数の違いは、VB 2008が全てのテキストを都度呼び込む点。
- 質問は、VB 2008の難点を克服する方法について。MSDNライブラリを確認したり、質問することを検討中。
- ベストアンサー
指定番目の文字を読む込む・・・超初心者
遅ればせながらVISTAを搭載したノートブックを買って遊び始めました。 VB2008Expressをダウンロードして最初のプロジェクトに挑戦中。 が、情けないことに最初から躓いて立ち往生中です。 <ファイルから指定番目の文字を読む込む関数の作成要領> ' --------------------------- ' FileGetChar VB6.0 Version ' --------------------------- Public Function FileGetChar(ByVal f As String, ByVal r As Long) As String Dim n As Integer Dim c As String * 1 n = FreeFile() Open f For Random As #n Len = 1 Get #n, r, c Close #n FileGetChar = c End Function ' ----------------------------- ' FileGetChar VB 2008 Version ' ----------------------------- Public Function FileGetChar(ByVal f As String, ByVal p As Short) As String Return (GetChar(My.Computer.FileSystem.ReadAllText(f), p)) End Function VB 2008バージョンの問題点は、その都度に全てのテキストを呼び込んでいることです。 質問は、この難点を克服する方法についてです。 MSDNライプラリを読めばとは思いますが・・・。 聞いた方が早いかなと思って質問します。 宜しくお願いします。
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>MSDNライプラリを読めばとは思いますが・・・。 >聞いた方が早いかなと思って質問します。 逆だと思います。 それと(私以外の)回答者さんたちは、MSDNライブラリを読めば分かるようなことを、 わざわざ回答しなければならないことにもなります。 それでも一応アドバイス的なものをしておくと、FileStream.Seekを使うと、 お望みの動作に近いことが可能かもしれません。
関連するQ&A
- VB2008 2バイト文字の化け字は当然! Yes or No?
Function FileGetChar(ByVal f As String, ByVal p As Integer) As String Dim n As Integer = FreeFile() Dim c As Char = “” If File.Exists(f) Then FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1) Seek(n, p) If Not EOF(n) Then FileGet(n, c) End If FileClose(n) End If Return c End Function このようにSeek関数とFileGet関数を利用する限りでは2バイト文字の化け字は避けられない! 一体、この私の判断は正しいのでしょうか? VB2008 Express Edition
- 締切済み
- Visual Basic
- VB 2008: Do Whie...Loop文について
Function FileGetChar(ByVal f As String, ByVal p As Integer) As String Dim i As Integer = 1 Dim j As Integer = 0 Dim l As Integer Dim n As Integer = FreeFile() Dim c As Char If File.Exists(f) Then FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1) l = FileLen(f) Do While (i + j <= l) FileGet(n, c, i + j) j = j - (Math.Abs(Asc(c)) > 255) i = i + 1 If i > p Then Exit Do Else c = "" End If Loop FileClose(n) End If Return c End Function [イミディエイトウインドウ] ? FileGetChar("D:\Temp\Test.txt",1) "1" ? FileGetChar("D:\Temp\Test.txt",2) "2" と、一応は動作しています。 l------->ファイル長 i+j----->読み込みのカレントポジション p------->読み込み指示ポジション 今、悩んでいるのはDo...Loop文中のIf Else End If の追放。 何か妙手があれば教えて頂きたい。
- ベストアンサー
- Visual Basic
- VB初心者です。コードの書き方が分かりません。
VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?
- ベストアンサー
- Visual Basic
- VB6で特定フォルダのCSVファイルを指定して開く
お世話になります。 ある株価を記すCSVファイルを読んで、配列格納しようと下記プログラムを書いてみましたが、 この状態では「読み込み対象のファイル」が「このVBプロジェクト」と同じフォルダに入っていなければならないようです。 そこで C:\IR_NK\USDJPY_20071010.csv の USDJPY_20071010.csv を読むというように、「別のフォルダのファイル」を読み込むように書き換えたいです。 この場合、どのように書けばいいか教えて欲しいです。 Private Sub C_FJU() Dim H_R(2) As Integer Dim HI_R(2, 8000) As String Dim intFileNo As Integer Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "USDJPY_20071010.csv" For Input As #intFileNo Do While Not EOF(intFileNo) Input #intFileNo, strTextLine H_R(0) = H_R(0) + 1 HI_R(0, H_R(0)) = Trim(strTextLine) strTxtDat = strTxtDat & strTextLine & vbCrLf Loop T_HYO.Text = strTxtDat Close #intFileNo End Sub
- ベストアンサー
- Visual Basic
- 0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題
0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題ですが、一つの数字しか計算が出来ません 5と12の場合は String "5 12" から型 'Long' への変換は無効です。と出てきてしまいます。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Long Dim f As Long n = CLng(TextBox1.Text) ←ここにエラーが出ます。 TextBox2.Text = CStr(Recur(n)) End Sub Public Function Recur(ByVal arg As Long) As Long If arg = 1 Then Recur = arg Exit Function End If Recur = arg * Recur(arg - 1) End Function End Class というプログラムです。分かる方よろしくお願いします。 実行エラーです。
- ベストアンサー
- Visual Basic
- VB.NETで出来てC#で出来ない???
VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) { set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------
- ベストアンサー
- その他(プログラミング・開発)
- VB6.0のString関数に代わるVB2008のそれは?
2009年1月27日にVB 2008Expressをダウンロードしたばかりの初学者です。 ですから、色々とわからないことだらけです。 で、今回は VB6.0のString関数に代わるVB2008のそれ。 ? String(12, "*") ************ Function Strings(ByVal C As Char, ByVal L As Integer) As String Return Space(L).Replace(" ", C) End Function 少しは探しましたが、適当なのがなくてStrings関数を作成してしまいました。 2週間程度の初学者。 しかも、文字列関連のヘルプは昨日に初めて紐解いたばかり。 ですから、「適当なのがない」との判断はかなり怪しいものです。 そこで、「VB6.0のString関数に代わるVB2008のそれは、これですよ!」という回答をお願いします。
- ベストアンサー
- Visual Basic
- C++で作成したDLLを vb.net から動的に
C++で作成したDLLを vb.net から動的に使用する方法 <DllImport("DllNAME")> _ Private Shared Function FuncName( _ <MarshalAs(UnmanagedType.LPStr)> ByVal str1 As StringBuilder, _ <MarshalAs(UnmanagedType.LPStr)> ByVal str2 As StringBuilder ) As String End Function Sub huga() Dim result As String = FuncName( "hoge", "piyo" ) MsgBox(result) End Sub 上記方法で 静的にはリンク出来たのですが 動的にリンクする方法がわかりません ご教授ください お願いします!
- 締切済み
- Visual Basic
- VB.NETでのiniファイル読込について。
.netでのiniファイル読込がうまくいきません。 何が悪いのかさっぱりわかりません。 ご指摘お願いいたします。 環境 os :xp 開発ソフト VB.NET ver 1.1.4322 SP1 ソース Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long '実行ファイルパスの取得 *VB6のapp.path Shared Function GetAppPath() As String Return System.IO.Path.GetDirectoryName( _ System.Reflection.Assembly.GetExecutingAssembly().Location) End Function Function INI_DBPATH_READ(ByVal FilePath As String) As String Dim lngRet As Long '読み込みバッファ(固定長) Dim strGetBuff As String = 256 'iniファイルより読み込む文字列のサイズ Dim intGetSize As Integer 'セクション名 Dim strSection As String 'キー名 Dim strKey As String '読み込みエラー時の出力文字列 Dim strErr As String 'iniファイル名(フルパス) Dim striniFn As String strGetBuff = Space(256) strSection = "TIFF_FOLDER" strKey = "PATH" strErr = "失敗" striniFn = Replace(GetAppPath(), "\bin", "\Ini") & "\test.ini" intGetSize = 256 'strGetBuffに文字列を取得する lngRet = GetPrivateProfileString(strSection, strKey, strErr, _ strGetBuff, intGetSize, striniFn) '末尾のNull除去 MsgBox(Microsoft.VisualBasic.Left(strGetBuff, InStr(strGetBuff, Chr(0)) - 1)) End Function iniファイルの内容 [TIFF_FOLDER] PATH=成功
- ベストアンサー
- Visual Basic
- メール
VBから変数Aを本文に自動的に貼り付ける方法を教えてください。 なお下は以前開発したものです。応用して使えるでしょうか? Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal ipopperation As String, ByVal lpfile As String, _ ByVal lpparameters As String, ByVal lpdirectory As String, ByVal nshowcmd As Long) As Long --------- Private Sub ??_Click() Dim LngReturn As Long Dim StrCommand As String StrCommand = Trim$(Text_mail_pc) If LCase(Left(StrCommand, 7)) <> "mailto:" Then StrCommand = "mailto:" & StrCommand End If LngReturn = ShellExecute(Me.hwnd, "open", StrCommand, vbNullChar, vbNullChar, Sw_Shownormal) End Sub ---------- ※↓のVBの質問とは全く関係ありません。
- ベストアンサー
- Visual Basic
お礼
[イミディエイト] ? FileSeek("D:\Temp\Test.txt", 2) "B" おかげ様で、上のように FileStream.Seek で目的を達成できました。 本当に心から感謝です。