■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#3296-0TextBOXの読み込みおりも1999-10-25(月) 22:46
     #3298-0RE#3296:TextBOXの読み込みYuO1999-10-25(月) 23:50
     #3301-0RE#3298:TextBOXの読み込み匿名33011999-10-26(火) 00:07
     #3304-0RE#3301:TextBOXの読み込みMaOh1999-10-26(火) 00:43
     #3306-0RE#3301:TextBOXの読み込みぜんちゃん1999-10-26(火) 01:05
#3296-0
TextBOXの読み込み
はじめてここに書きます。
しつもんなんですが、VB5で、複数行表示できるテキストボックスから、
1行だけ文字列を抜き出してくるには、どうすればいいんでしょう?
単純に Textbox1.text = Textbox2.text   だと無理ですし・・・
  (複数行表示可)          (1行だけ表示可)
アドバイスおねがいします!
#3298-0
RE#3296:TextBOXの読み込み
> はじめてここに書きます。
> しつもんなんですが、VB5で、複数行表示できるテキストボックスから、
> 1行だけ文字列を抜き出してくるには、どうすればいいんでしょう?
> 単純に Textbox1.text = Textbox2.text   だと無理ですし・・・
>   (複数行表示可)          (1行だけ表示可)
> アドバイスおねがいします!

地道にvbCrLfを数えていってはだめですか?

Dim PosStart As Integer '行の開始点を記録
Dim NextCrLf As Integer '次の改行位置を記録
Dim LineNumber As Integer '現在の行
Dim TextBoxData As String 'テキストボックスの内容を保持(高速化の為)
Dim ResultData As String '指定の行の内容
'他に,GetLineNumber As Integer : 取り出す行,という変数を使う

PosStart = 1
TextBoxData = Textbox1.Text
LineNumber = 1
NextCrLf = InStr (TextBoxData, vbCrLf) '改行位置を探す

Do Until (LineNumber = GetLineNumber Or NextCrLf = 0)
 PosStart = NextCrLf + 2 'CrとLfを読み飛ばす。
 LineNumber = LineNumber + 1 '行のカウンタを増やす
 NextCrLf = InStr (PosStart, TextBoxData, vbCrLf) '次の改行位置を探す
Loop

If NextCrLf = 0 Then NextCrLf = Len(TextBoxData) + 1 '改行が見つからない→最後まで見た
If LineNumber = GetLineNumber Then
 ResultData = Mid$(TextBoxData, PosStart, NextCrLf - PosStart)
Else
 ResultData = ""
End If
#3301-0
RE#3298:TextBOXの読み込み
> 地道にvbCrLfを数えていってはだめですか?

う〜ん・・・
Line Input #1  みたいには、できないんでしょうか?
ファイルから1行ずつ読み込む方法ですね。
これを、テキストボックスから1行ずつ、とおもっているんですが・・・
#3304-0
RE#3301:TextBOXの読み込み
>> 地道にvbCrLfを数えていってはだめですか?
> う〜ん・・・
> Line Input #1  みたいには、できないんでしょうか?
> ファイルから1行ずつ読み込む方法ですね。
いったん、テンポラリファイルに吐き出してから、Line Input #。
で、最後にテンポラリファイルをKill、で良いのでは?

TextBoxなんて、大きくても64KB程度しかないから、気になるほどの速度低下にはならないかと。
なんなら、Text ISAM Driverを使って、ODBC経由で一行ずつ読むというなんて方法もあり(遅)

> これを、テキストボックスから1行ずつ、とおもっているんですが・・・
一行ずつ読み込まなくちゃ行けない理由が不明…(泣)
#3306-0
RE#3301:TextBOXの読み込み
> > 地道にvbCrLfを数えていってはだめですか?
> う〜ん・・・
> Line Input #1  みたいには、できないんでしょうか?

#名前が匿名に変わってたけど・・・?

Line Input #1とはイメージがちょっと違いますがこんな方法もありですよ。(API使用なんですが書いちゃいます)

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                         (ByVal hWnd As Long, ByVal wMsg As Long, _
                          ByVal wParam As Long, lParam As Any) As Long

Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEFROMCHAR = &HC9

Private Sub Command1_Click()

    Dim L_Len As Long
    Dim L_Ret As Long
    Dim S_Buf As String
    Dim LineMax As Long
    Dim linecnt As Long

    '最大行数取得
    LineMax = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0&, ByVal 0&)
  
    For linecnt = 0 To LineMax - 1
  
        L_Ret = SendMessage(Text1.hWnd, EM_LINEINDEX, linecnt, ByVal 0&)
        L_Len = SendMessage(Text1.hWnd, EM_LINELENGTH, L_Ret, ByVal 0&)
        S_Buf = Space$(L_Len)
        L_Ret = SendMessage(Text1.hWnd, EM_GETLINE, linecnt, ByVal S_Buf)
    
        Debug.Print S_Buf
    
    Next linecnt

End Sub

注)この方法は改行コードがあるないに関わらず(TextBoxが勝手に改行した行)表示されている状態
そのままが1行となります。
このページと関連する記事:
#14904-0複数行のテキストボックスから任意の行を指定するには?2001-03-07(水) 15:01
#22999-0一行づつ読み取り、各テキストボックスへ・・・2001-09-06(木) 19:35
#12555-0テキストボックスについて1999-12-30(木) 13:17
#4628-0RE#4625:line input ステートメントでの読みこみ1999-12-28(火) 02:46
#19242-0RichTextBoxのFindメソッドについて2001-03-01(木) 23:43
#1491-2改行表示2002-07-08(月) 11:42
#34824-0Do...Loopステートメントについて2000-12-06(水) 16:54
#14072-0ファイル操作2000-01-21(金) 16:48
#17785-0テキストボックスのスクロールの同期2000-03-13(月) 06:59
#34012-0CSV形式ファイルの読み込み処理方法について2000-11-24(金) 11:49
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)