tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル文字列の検索について
記事No1605
投稿日: 2005/04/21(Thu) 15:37
投稿者さおり
[OSのVer]:WindowsXP    [VBのVer]:VB.NET2003

こんにちわ、初めて投稿します。
どの言語もやった事がない、初心者です。

文字列の検索について伺いたいのですが、

e:\CSV\aaaa.csv↑e:\svf_test\bb.csv↑e:\csv\bb.txt↑e:\csv\test01.csv↑
e:\CSV\ccccccccccc.csv↑123456789↑csv[Option]UseNoDataMsg=0↑[Default]↑
LogFileName=e:\DEBUG\ucx.log↑d:\work\12345.csv

という文字列が書かれているテキストファイルを読み込んで、右から数えて最初の\の次から.csv
までの文字列を全て取得して、再度テキストに出力したいのですが、
「右から数えて最初の\の次から.csvまでの文字列を全て取得」という処理は可能でしょうか?

Substringでは対応できないので、もし実現可能でしたら、その方法も教えて頂きたいです。
宜しくお願い致します

[ツリー表示へ]
タイトルRe: 文字列の検索について
記事No1606
投稿日: 2005/04/21(Thu) 15:40
投稿者さおり
すいません、書き方がおかしかったかもしれません。

********.csvを全て取得したいです。

宜しくお願い致します。

[ツリー表示へ]
タイトルRe^2: 文字列の検索について
記事No1607
投稿日: 2005/04/21(Thu) 16:24
投稿者花ちゃん
> ********.csvを全て取得したいです。
パスを除いたファイル名を取得したいのなら .NETのTips集の中のファイルの中に
ファイルに関するパス操作色々 の中に 指定のパス文字列からファイル名を取得 が
あったと思うのですが?

次回質問される前に下記をお読み下さい。
 hhttp://www.bcap.co.jp/hanafusa/hazimeni.htm#keijiban 

[ツリー表示へ]
タイトルRe^3: 文字列の検索について
記事No1608
投稿日: 2005/04/21(Thu) 16:35
投稿者さおり
ファイル名の取得ではなく、テキストファイルの中の文字列から、
******.csvという文字列を取得したいのですが?

[ツリー表示へ]
タイトルRe^4: 文字列の検索について
記事No1609
投稿日: 2005/04/21(Thu) 17:22
投稿者花ちゃん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> ファイル名の取得ではなく、テキストファイルの中の文字列から、
> ******.csvという文字列を取得したいのですが?

だったら最初にそのように書いておいて下さい。******.csv ってファイル名じゃないのですか?

だから、下記のように書いていたはずですが?
> 次回質問される前に下記をお読み下さい。
>  hhttp://www.bcap.co.jp/hanafusa/hazimeni.htm#keijiban

e:\CSV\aaaa.csv↑e:\svf_test\bb.csv↑e:\csv\bb.txt↑e:\csv\test01.csv↑
e:\CSV\ccccccccccc.csv↑123456789↑csv[Option]UseNoDataMsg=0↑[Default]↑
LogFileName=e:\DEBUG\ucx.log↑d:\work\12345.csv

上記のCSVの文字をすべて取得したいという事ですか? それとも 12345.csv のように
取得したいという事ですか?
せっかく例を上げているのならこの中で取得したい文字列を書き出せば解るのに
 
> ******.csvという文字列を取得したい
>右から数えて最初の\の次から.csvまでの文字列を全て取得
ではすべてなのか、1個だけなのかも解らないし、******.csv では CSV だけなのか
拡張子を含むファイル名を知りたいのかも解らないかと思うのですが。

[関数・メソッド等]の中に[文字列関数の使用例]があるのでその関数を
見て下さい。

aaaa.csv
bb.csv
test01.csv
12345.csv
これだけを取得したいという事ではないのですか?

[ツリー表示へ]
タイトルRe^5: 文字列の検索について
記事No1610
投稿日: 2005/04/21(Thu) 17:53
投稿者さおり
文字列の検索について伺いたいのですが、

e:\CSV\aaaa.csv↑e:\svf_test\bb.csv↑e:\csv\bb.txt↑e:\csv\test01.csv↑
e:\CSV\ccccccccccc.csv↑123456789↑csv[Option]UseNoDataMsg=0↑[Default]↑
LogFileName=e:\DEBUG\ucx.log↑d:\work\12345.csv

という文字列が書かれているテキストファイルを読み込んで、右から数えて最初の\の次から.csv
までの文字列を全て取得して、再度テキストに出力したいのですが、
「右から数えて最初の\の次から.csvまでの文字列を全て取得」という処理は可能でしょうか?

と初めから書いてありますよね?
日本語の読解力が足りないんじゃないですか?

aaaa.csv
bb.csv
test01.csv
12345.csv
これだけを取得したいという事ではないのですか?

初めから、それを言ってますよ。

文字列関数の使用例に載っているのでは、解決できないと思っているのですが。
どの関数を使用すれば.csvの文字列だけを取得できるのでしょうか?

[ツリー表示へ]
タイトルRe^6: 文字列の検索について
記事No1612
投稿日: 2005/04/21(Thu) 18:29
投稿者花ちゃん
> 日本語の読解力が足りないんじゃないですか?
教えを乞う立場であまりえらそうな事書かない方がいいのでは。
> ファイル名の取得ではなく、テキストファイルの中の文字列から、
誤解をまねく書き方をしているのは貴方の方だし。

下記が取得したいなら,拡張子CSVのファイル名だけを取得したいと
書けばいい物を右からとか書くから余計ややこしくなっているのでは。

> aaaa.csv
> bb.csv
> test01.csv
> 12345.csv
> これだけを取得したいという事ではないのですか?
>
> 初めから、それを言ってますよ。
そんな事どこに書いてました。


それにこれはファイル名ではないのですか?

だから System.IO.Path.GetFileName で取得できますと回答したのに......。

試して見ましたが取得できましたよ 
Debug.WriteLine の結果
aaaa.csv
bb.csv
test01.csv
ccccccccccc.csv
12345.csv

貴方の上司に同じように聞いて見たらどうでしょうか?

[ツリー表示へ]
タイトルRe^7: 文字列の検索について
記事No1613
投稿日: 2005/04/21(Thu) 19:03
投稿者さおり
すいません、分かりやすいようにと思ってテキストの中身を変えて初めに載せたのですが、
実際のテキストの中身を載せないとダメでしたね。
実際は

[DataFileName]
6=<6>e:\CSV\FTEST001.csv
5=<5>e:\svf_test\svf_0001\svf_0001.csv
4=<4>e:\CSV\svftest2*.txt
3=<3>e:\csv\testuch6.frm
2=<2>e:\csv\testuch6.csv
1=<1>e:\csv\test01.csv
0=<0>e:\CSV\svftest2*.csv

となっているので、一行ずつ読み込んだときに、0=<0>という文字も読み込んでしまうので、

> だから System.IO.Path.GetFileName で取得できますと回答したのに......。

だと、パスに無効な文字が含まれています。となってしまいます。
これに関しては完全に説明不足でしたね、すいません。

> 試して見ましたが取得できましたよ 
> Debug.WriteLine の結果
> aaaa.csv
> bb.csv
> test01.csv
> ccccccccccc.csv
> 12345.csv

ちなみに、初めに載せたテキストの中身に、「LogFileName=e:\DEBUG\ucx.log」や「e:\csv\bb.txt」
というような文字列もあったのですが、System.IO.Path.GetFileName で、私の様な例外は発生しなかっ
たのですか?

[ツリー表示へ]
タイトルRe^8: 文字列の検索について
記事No1614
投稿日: 2005/04/21(Thu) 19:16
投稿者花ちゃん
これなら右からに拘る意味が解りますが......
1.1行づつ String.IndexOf メソッド で .CSV があるか調べて下さい。
2.あれば、String.LastIndexOf メソッド で \ の位置を取得してください。
3.全体の文字列の長さから見つかった位置から末尾までがそれです。

>一行ずつ読み込んだときに、0=<0>という文字も読み込んでしまうので
なら 0=<0> を取り除いた文字列を使用する方法もあります。

又、String.Replace メソッドを使って、改行文字を \ に置き換えて
String.Split メソッド で \ で区切って .CSV があるか調べる方法等色々あります。

[ツリー表示へ]
タイトルRe:文字列の検索
記事No1615
投稿日: 2005/04/21(Thu) 20:22
投稿者さおり
でも、System.IO.Path.GetFileName で持ってこれるとは思ってなかったので、勉強になりました。
ファイル名.csv等はもちろんファイル名ですが、System.IO.Path.GetFileName 等で、文字列をファイル
名として認識してもらえると思ってなかったので、文字列という言葉にこだわっていたんです。

> 1.1行づつ String.IndexOf メソッド で .CSV があるか調べて下さい。
> 2.あれば、String.LastIndexOf メソッド で \ の位置を取得してください。

1と2を個別に試してみて、取得はできました。
考え方として、1でcsvがあった行を2に渡して、\の位置を確認するというようにすれば宜しいという
ことでしょうか?

まずは、上記の事ができてから次の事を質問しなさいと怒られるかもしれませんが、

試しに、
e:\csv\test01.csv
のテキストを読み込んで、出力したのが下記なんですが、
13 →.csv
6  →\

この13と6を利用して、

> 3.全体の文字列の長さから見つかった位置から末尾までがそれです。

test01.csvを書き出すために、どのようにしたらよいのか、考え方がまったく創造つかないので、
よろしければ教えてください。

[ツリー表示へ]
タイトルRe:文字列の検索
記事No1617
投稿日: 2005/04/21(Thu) 21:26
投稿者花ちゃん
ファイルの位置が解れば計算してその位置の文字を取得すればいいのでは。

'012345678901234567
"e:\csv\test01.csv"
MyString.Substring(7,10)


        Dim MyString As String = "e:\csv\test01.csv"
        If UCase(MyString).IndexOf(".CSV") > 0 Then
            Dim P1 As Integer = MyString.LastIndexOf("\")
            Debug.WriteLine(MyString.Substring(P1 + 1, (MyString.Length - P1) - 1))
        End If

[ツリー表示へ]
タイトル解決
記事No1628
投稿日: 2005/04/22(Fri) 17:03
投稿者さおり
こんにちわ。

.EndsWith .IndexOf .LastIndexOf .Substringを組み合わせて、期待通りの処理結果を得ることが
できました。

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

[ツリー表示へ]