indexOf関数で1文字ではなく7文字などを対象にした場合は?

解決


マグ  2004-06-24 16:32:54  No: 114237  IP: [192.*.*.*]

タイトルの通りですが、

indexOf関数で1文字ではなく、7文字を検索対象にしたいんですけれど、

private z as string="C:\Documents and Settings\test\デスクトップ\aa.txt"
private nanagasa as string
nanagasa = z.LastIndexOf("デスクトップ")
MessageBox.Show(nanagasa)

のようなソースがあった場合indexOfの検索対象をデスクトップにしたいのですが、
どのように記述すればいいでしょうか?
上のソースだとデスクトップのデの文字を検索対象としてしまいます。

編集 削除
nanashi  2004-06-24 16:44:36  No: 114238  IP: [192.*.*.*]

意味が分からない。

> nanagasa = z.LastIndexOf("デスクトップ")

これは文字列zの最後から「デスクトップ」を探してきてその先頭文字位置を返しています。
何がしたいのでしょうか?

編集 削除
特攻隊長まるるう  2004-06-24 17:22:07  No: 114239  IP: [192.*.*.*]

>上のソースだとデスクトップのデの文字を検索対象としてしまいます。
ちゃんと動作確認してますか?
 LastIndexOf→IndexOf
だとして、ちゃんと"デスクトップ"が検索対象となるはずですが?
それと、何度も質問してるんですから、そろそろ環境とか明記する
のを忘れなくなったり、確認が不十分なだけの質問はやめましょうね?
[VB.NET]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemstringclassindexoftopic2.asp

編集 削除
マグ  2004-06-24 18:10:26  No: 114240  IP: [192.*.*.*]

失礼しました。
環境:VB.NET

Private z As String = "C:\Documents and Settings\test\デスクトップ\aa.txt"
Private nanagasa As String
Private s As String
nanagasa = z.LastIndexOf("デスクトップ")
s = z.Substring(nanagasa + 1)
MessageBox.Show(s)

のソースで
スクトップ\aa.txt
というように表示されてしまいます。
これを
aa.txt
のように表示させたいんです。
s = z.Substring(nanagasa + 1)のソースを変えないで・・・
そういう操作が出来ますか?
もし、出来るのならば、教えてください。
お願いします。

編集 削除
nanashi  2004-06-24 18:19:31  No: 114241  IP: [192.*.*.*]

> s = z.Substring(nanagasa + 1)のソースを変えないで・・・

別に変えたってイイんじゃないの?
つーかそれ以前にString型のオブジェクトにIntegerを突っ込んでるのが理解出来ませんが…。
私が直すとしたらこんな感じッスかねー。


Dim z As String = "C:\Documents and Settings\test\デスクトップ\aa.txt"
Dim s As String
Dim sBuff As String
Dim iLength As Integer

sBuff = "デスクトップ"
iLength = z.LastIndexOf(sBuff)
s = z.Substring(iLength + sBuff.Length + 1)
MessageBox.Show(s)


別に何も難しいことはしていませんが(^^;

編集 削除
マグ  2004-06-24 19:15:21  No: 114242  IP: [192.*.*.*]

>別に変えたってイイんじゃないの?
>つーかそれ以前にString型のオブジェクトにIntegerを突っ込んでるのが理解出来ませんが…。
急いでソースを記述していたので気づきませんでした。
> s = z.Substring(nanagasa + 1)のソースを変えないで・・・
やはりこの条件では無理でしたか。

理論上Length関数を使って、文字の長さを取得するしかないみたいですね。

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

編集 削除
マグ  2004-06-24 19:18:46  No: 114243  IP: [192.*.*.*]

追加し忘れました。

短くするのならば・・・

Dim z As String = "C:\Documents and Settings\test\デスクトップ\aa.txt"
Dim s As String
Dim sBuff As String="デスクトップ".Length
Dim iLength As Integer

iLength = z.LastIndexOf(sBuff)
s = z.Substring(iLength + sBuff + 1)
MessageBox.Show(s)

編集 削除
GS  2004-06-24 19:58:48  No: 114244  IP: [192.*.*.*]

>>Dim sBuff As String="デスクトップ".Length
の時点でsBuffに6が入りますが・・・
>>iLength = z.LastIndexOf(sBuff)
のところで問題では?

>>s = z.Substring(nanagasa + 1)のソースを変えないで・・・

        Dim strFilePath As String = "C:\Documents and Settings\test\デスクトップ\aa.txt"
        Dim SerchWord As String = "デスクトップ"
        Dim intFindPos As Integer
        Dim strResult As String
        intFindPos = strFilePath.LastIndexOf(SerchWord) + SerchWord.Length
        strResult = strFilePath.Substring(intFindPos + 1)
        MsgBox(strResult)

編集 削除
マグ  2004-06-25 09:13:23  No: 114245  IP: [192.*.*.*]

>>>Dim sBuff As String="デスクトップ".Length
>>>の時点でsBuffに6が入りますが・・・
>>>iLength = z.LastIndexOf(sBuff)
>>>のところで問題では?

また、ミスをしました。
確認してませんから・・・(笑

どうしても、Legth関数を使うしかないみたいですね。

編集 削除
z  2004-06-25 10:02:32  No: 114246  IP: [192.*.*.*]

PGやめたら?
工数の無駄使い。

編集 削除
GS  2004-06-25 15:20:14  No: 114247  IP: [192.*.*.*]

察するに
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200406/04060116.txt
の内容の続きかと思いますが・・・
プレイリスト(*.m3u)は相対パスで記述しなくても構わないと思います。

Form1上に1つボタンを配置し以下のコードを追加してください。

    Private path As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        With FolderBrowserDialog1
            .Description = "プレイリストに追加するファイルを含むフォルダーを選択して下さい。"
            .ShowNewFolderButton = False
            .SelectedPath = ""
            .ShowDialog()
        End With
        With SaveFileDialog1
            .FileName = ""
            .Filter = "プレイリスト (*.m3u)|*.m3u"
            .ShowDialog()
            path = .FileName
            Shell("cmd.exe /c dir /B /S """ + FolderBrowserDialog1.SelectedPath + """ > """ + SaveFileDialog1.FileName + """")
            MessageBox.Show("プレイリストの出力完了!!" + vbCrLf, "メッセージ")
        End With
    End Sub


意図が異なっていたらゴメンナサイ。

編集 削除
マグ  2004-06-25 16:35:04  No: 114248  IP: [192.*.*.*]

実は通常のm3uのファイルだったらフルパスでもいいですけれど・・・

今回の場合は
Autorunからm3uのプレイリストを自動実行させるためにCD-Rに焼き、
それをプレイリストから音楽ファイルにリンクさせるときに使う音楽ファイルもCDに焼いてしまいますよね。
そのため、デスクトップ上ではC:\〜〜〜と入ってきてしまうためCDに焼いたときに
同CD内にある音楽ファイルにリンクしてくれなくなってしまいます。
そのため相対パスに設定しているんです。

前の記事で説明不足でごめんなさい。

編集 削除
GS  2004-06-25 17:39:09  No: 114249  IP: [192.*.*.*]

ナルホド・・・

では一度テキストに落としたFileリストを
再度読み込む際に、FolderBrowserDialog1.FileNameの長さ分(±2 ^^;)だけ
文字列を削除すればすべて相対パスになるのでは?

でわ今から出かけるので・・・bye

編集 削除
マグ  2004-06-25 18:24:16  No: 114250  IP: [192.*.*.*]

でも、すでにあのソースではありませんけれどね・・・

どんどんソースを改造して簡単に操作できるようにして、
ダイアログボックスの表示なども少なくして、
パスを区切る位置の設定の自分で選択が出来るようにしました。
さらに、区切らないようにするようにも、設定できるようにしました。

C:\Documents and Settings\テスト\デスクトップ\aa.mp3
とか
デスクトップ\aa.mp3
とか
aa.mp3

などのように出力できるように現在、ソースをすでに変えています。

編集 削除