改行のあるテキストをポップアップメニューに切り分けて追加したい

  1. 3 years ago

    Kazuto O

    4 Nov 2014 Pre-Release Testers
    Edited 3 years ago

    ちょっと、あれこれやってみたんだけど、うまく行きません。
    たぬき
    しまうま
    ねこ
    きりん
    とかって改行のあるようなテキストをポップアップメニューにAddRawして起動時にセットしたいんですが.
    考えたのは改行の位置を調べて、Midで取り出せばいいんだと思うんですが、うまくいきません。
    どなたか、アドバイスお願いします。よろしくです。

    補足ですが、あるフォルダーの中にあるフォルダー名をshellを使って、lsで一覧取り出して、それをStringsに渡しているものをポプアップメニューに追加したい感じです。外部のテキストファイルなら、読み込む時にReadLine使えばいいのでしょうが、それができない感じです。まあ、一旦テキストファイル書き出して再度読むとかも考えたんですけども。

  2. Kazuto O

    5 Nov 2014 Pre-Release Testers
    Edited 3 years ago

    やってみたら出来たのであげておきます。
    要するに、文字数カウントして、次の改行の位置から前の位置を引いてMidで抽出する感じですね。
    他にもやり方あるのかもですけれど。

    Dim theResult As String=//テキストをセット
    Dim theNo,theNo2,theNo3,theNo4 As Integer
    Dim theName As String
    theNo4=Len(theResult)
    theNo=0
    While theNo<theNo4 //文字位置が全体を越えたらループ終了
    theNo2=InStr(theNo,theResult,EndOfLine)
    theName=Mid(theResult,theNo,theNo2-theNo )
    PopupMenu.AddRow(theName)
    theNo3=Len(theName)+1//EndOfLineの一文字の分で+1
    theNo=theNo+theNo3//文字数を追加してゆく
    Wend
    PopupMenu.ListIndex=0

  3. Yoshitaka M

    5 Nov 2014 Pre-Release Testers, Xojo Pro

    改行で区切って文字列を配列に入れる方法があると思います。EndOfLine を改行コードとすると、

    Dim s, t( ) As String
    s = "あああ" + EndOfLine + "いいい" + EndOfLine + "ううう" + EndOfLine + "えええ"

    t = Split( s, EndOfLine )

    で、s を split で EndOfLine で分離して、t の配列にデータを入れることができます。よく使います。

    または、NthField というメソッドがあります。
    result = NthField( source, separator, fieldNumber )
    で source 文字列を separator で分離した場合の fieldNumber番目の文字列を result として返します。

    という方法で、実現できますでしょうか?
    --
    村岡義高@Xojo

  4. Kazuto O

    5 Nov 2014 Pre-Release Testers

    村岡さん こんばんは
    できました!Splitと使うと簡潔にできますね。やってみたコードはこんな感じです。
    Dim s As Shell
    s= New Shell
    Dim theCode As String
    theCode="cd "
    theCode=theCode+"/Applications/FlightGear.app/Contents/Resources/data/Aircraft/"+EndOfLine
    theCode=theCode+"ls"
    s.Execute(theCode)
    Dim t( ) As String
    t=Split(s.Result,EndOfLine)
    Dim theNo As Integer
    theNo=UBound(t)
    For its As Integer=0 To theNo
    If t(its)<>"" Then
    PopupMenu3.AddRow(t(its))
    End If
    Next
    PopupMenu3.ListIndex=0

    FlightGear.appというソフトの中にある航空機の名前を取得するのが目的でした。何個あるのか?分からないので、UBoundで最後のIndexを取得してみました。また、なんでか分からないのですが、空白が出来るので、から文字はエスケープしています。

    どうもありがとうございました。

or Sign Up to reply!