タイトルの通りですが、
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の検索対象をデスクトップにしたいのですが、
どのように記述すればいいでしょうか?
上のソースだとデスクトップのデの文字を検索対象としてしまいます。
意味が分からない。
> nanagasa = z.LastIndexOf("デスクトップ")
これは文字列zの最後から「デスクトップ」を探してきてその先頭文字位置を返しています。
何がしたいのでしょうか?
>上のソースだとデスクトップのデの文字を検索対象としてしまいます。
ちゃんと動作確認してますか?
LastIndexOf→IndexOf
だとして、ちゃんと"デスクトップ"が検索対象となるはずですが?
それと、何度も質問してるんですから、そろそろ環境とか明記する
のを忘れなくなったり、確認が不十分なだけの質問はやめましょうね?
[VB.NET]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemstringclassindexoftopic2.asp
失礼しました。
環境: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)のソースを変えないで・・・
そういう操作が出来ますか?
もし、出来るのならば、教えてください。
お願いします。
> 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)
別に何も難しいことはしていませんが(^^;
>別に変えたってイイんじゃないの?
>つーかそれ以前にString型のオブジェクトにIntegerを突っ込んでるのが理解出来ませんが…。
急いでソースを記述していたので気づきませんでした。
> s = z.Substring(nanagasa + 1)のソースを変えないで・・・
やはりこの条件では無理でしたか。
理論上Length関数を使って、文字の長さを取得するしかないみたいですね。
ありがとうございました。
追加し忘れました。
短くするのならば・・・
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)
>>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)
>>>Dim sBuff As String="デスクトップ".Length
>>>の時点でsBuffに6が入りますが・・・
>>>iLength = z.LastIndexOf(sBuff)
>>>のところで問題では?
また、ミスをしました。
確認してませんから・・・(笑
どうしても、Legth関数を使うしかないみたいですね。
PGやめたら?
工数の無駄使い。
察するに
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
意図が異なっていたらゴメンナサイ。
実は通常のm3uのファイルだったらフルパスでもいいですけれど・・・
今回の場合は
Autorunからm3uのプレイリストを自動実行させるためにCD-Rに焼き、
それをプレイリストから音楽ファイルにリンクさせるときに使う音楽ファイルもCDに焼いてしまいますよね。
そのため、デスクトップ上ではC:\〜〜〜と入ってきてしまうためCDに焼いたときに
同CD内にある音楽ファイルにリンクしてくれなくなってしまいます。
そのため相対パスに設定しているんです。
前の記事で説明不足でごめんなさい。
ナルホド・・・
では一度テキストに落としたFileリストを
再度読み込む際に、FolderBrowserDialog1.FileNameの長さ分(±2 ^^;)だけ
文字列を削除すればすべて相対パスになるのでは?
でわ今から出かけるので・・・bye
でも、すでにあのソースではありませんけれどね・・・
どんどんソースを改造して簡単に操作できるようにして、
ダイアログボックスの表示なども少なくして、
パスを区切る位置の設定の自分で選択が出来るようにしました。
さらに、区切らないようにするようにも、設定できるようにしました。
↑
C:\Documents and Settings\テスト\デスクトップ\aa.mp3
とか
デスクトップ\aa.mp3
とか
aa.mp3
などのように出力できるように現在、ソースをすでに変えています。