DOBON.NET DOBON.NETプログラミング掲示板過去ログ

配列の格納数が知りたい

環境/言語:[WindowsXP]
分類:[.NET]

配列に格納されている数を知りたいのですが
よろしくご教授お願いします。

配列は一次元です。
■No16638に返信(ふろふろさんの記事)
> 配列に格納されている数を知りたいのですが
> よろしくご教授お願いします。
>
> 配列は一次元です。
Lengthプロパティでいいのでは?
■No16639に返信(ガッさんの記事)
> ■No16638に返信(ふろふろさんの記事)
>>配列に格納されている数を知りたいのですが
>>よろしくご教授お願いします。
>>
>>配列は一次元です。
> Lengthプロパティでいいのでは?

早速のご返事ありがとうございます。
使い方を調べているのですがよく分かりません
教えていただけませんか?
■No16640に返信(ふろふろさんの記事)
> ■No16639に返信(ガッさんの記事)
>>■No16638に返信(ふろふろさんの記事)
> >>配列に格納されている数を知りたいのですが
> >>よろしくご教授お願いします。
> >>
> >>配列は一次元です。
>>Lengthプロパティでいいのでは?
>
> 早速のご返事ありがとうございます。
> 使い方を調べているのですがよく分かりません
> 教えていただけませんか?
>
>>Lengthプロパティでいいのでは?
>
> 早速のご返事ありがとうございます。
> 使い方を調べているのですがよく分かりません
> 教えていただけませんか?
とりあえずググってみました。
これで分からない場合は、分からない点を明記して再度ポストするといいでしょう:
http://www.google.co.jp/search?complete=1&hl=ja&q=.net+%E9%85%8D%E5%88%97%E3%80%80length&lr=
■No16642に返信(ガッさんの記事)
> >>Lengthプロパティでいいのでは?
>>
>>早速のご返事ありがとうございます。
>>使い方を調べているのですがよく分かりません
>>教えていただけませんか?
> とりあえずググってみました。
> これで分からない場合は、分からない点を明記して再度ポストするといいでしょう:
> http://www.google.co.jp/search?complete=1&hl=ja&q=.net+%E9%85%8D%E5%88%97%E3%80%80length&lr=

ガツさんありがとうございます。

私も
Lengthプロパティの使い方を調べてTESTしてるのですがうまくいきません。

実はDOBONチップスの
「あるフォルダ以下のサブフォルダ名をすべて取得する」

を使ってフォルダー名を表示させているのですが全てのパスがでてしまいますので
最後のファイル名だけを取り出しているのですが配列の個数が分からないと
ループ脱出が出来ないのです。
しかしこのロジックの中ではエラーになります。
別のところではOKです

DOBONより
''' 指定されたフォルダ以下のすべてのサブフォルダ名を取得する
''' </summary>
''' <param name="folderName">サブフォルダを調べるフォルダ名</param>
''' <param name="subFolders">取得したサブフォルダ名のリスト</param>
Private Shared Sub GetSubfolders( _
ByVal folderName As String, ByRef subFolders As ArrayList)
'folderNameにあるサブフォルダを取得
Dim folder As String
Dim folderName1 As String

folderName1 = "C:\Documents and Settings\TEST
For Each folder In System.IO.Directory.GetDirectories(folderName)
'リストに追加
subFolders.Add(folder)

' TextBox3.Text = folder → エラー???
               または、subFolders??
' Failname(folder) = subFolders(folder) 別配列にコピー

'再帰的にサブフォルダを取得する
GetSubfolders(folder, subFolders)

Next folder

ここで配列収納数をどこかにSETできればいいのですが・・・・
■No16643に返信(ふろふろさんの記事)
どこに配列が使われていますか?
私にはArrayListを使っているようにしか見えません。
これは配列とは違います。
また、このふろふろさんの説明では、私はふろふろさんが何をしたいのか想像できません。

本題とはまったく関係ない部分ですが、気になった点があるので書き留めておきます。

> 私も
> Lengthプロパティの使い方を調べてTESTしてるのですがうまくいきません。
これだけではどうテストし、何が得られたのかが全く見えません。

> 実はDOBONチップスの
> 「あるフォルダ以下のサブフォルダ名をすべて取得する」
>
> を使ってフォルダー名を表示させているのですが全てのパスがでてしまいますので
> 最後のファイル名だけを取り出しているのですが配列の個数が分からないと
> ループ脱出が出来ないのです。
> しかしこのロジックの中ではエラーになります。
これを"ロジック"というにはいささか提示している情報が少なすぎるといいますか、
はっきりいいますと何をもってロジックとしているのか見えません。

> 別のところではOKです
同様に「別」というものが見えません。

> ' Failname(folder) = subFolders(folder) 別配列にコピー
Failnameとは何ですか?
これも私からは全く見えません。


> ここで配列収納数をどこかにSETできればいいのですが・・・・
とりあえずArrayList、またはGetDirectoriesについて調べてみては?

失礼しました
お世話になります。

■No16643に返信(ふろふろさんの記事)
ふろふろ様の投稿をみると、
すみません、何がなさりたいのか掴んでいるのか自信がありませんが、
> を使ってフォルダー名を表示させているのですが全てのパスがでてしまいますので
> 最後のファイル名だけを取り出しているのですが配列の個数が分からないと
> ループ脱出が出来ないのです。
↑の文書を読んで推測してみましたが、
こういうことでしょうか。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim folderNamesArray As ArrayList = New ArrayList
  Const ROOT_PATH As String = "C:\WINNT"
  Me.GetFolders(ROOT_PATH, folderNamesArray)

  For Each folderName As String In folderNamesArray
    System.Diagnostics.Debug.WriteLine("絶対パス:" & folderName)
    System.Diagnostics.Debug.WriteLine("最後のフォルダ名:" & System.IO.Path.GetFileName(folderName))
  Next
End Sub

Private Sub GetFolders(ByVal rootFolderPath As String, ByVal folderNames As ArrayList)
  Dim subDirectryPathes As String() = System.IO.Directory.GetDirectories(rootFolderPath)

  For Each dirName As String In subDirectryPathes
    folderNames.Add(dirName)
    If System.IO.Directory.GetDirectories(dirName).Length > 0 Then
      Me.GetFolders(dirName, folderNames)
    End If
  Next
End Sub
■No16646に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> ■No16643に返信(ふろふろさんの記事)
> ふろふろ様の投稿をみると、
> すみません、何がなさりたいのか掴んでいるのか自信がありませんが、
>>を使ってフォルダー名を表示させているのですが全てのパスがでてしまいますので
>>最後のファイル名だけを取り出しているのですが配列の個数が分からないと
>>ループ脱出が出来ないのです。
> ↑の文書を読んで推測してみましたが、
> こういうことでしょうか。
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>   Dim folderNamesArray As ArrayList = New ArrayList
>   Const ROOT_PATH As String = "C:\WINNT"
>   Me.GetFolders(ROOT_PATH, folderNamesArray)
>
>   For Each folderName As String In folderNamesArray
>     System.Diagnostics.Debug.WriteLine("絶対パス:" & folderName)
>     System.Diagnostics.Debug.WriteLine("最後のフォルダ名:" & System.IO.Path.GetFileName(folderName))
>   Next
> End Sub
>
> Private Sub GetFolders(ByVal rootFolderPath As String, ByVal folderNames As ArrayList)
>   Dim subDirectryPathes As String() = System.IO.Directory.GetDirectories(rootFolderPath)
>
>   For Each dirName As String In subDirectryPathes
>     folderNames.Add(dirName)
>     If System.IO.Directory.GetDirectories(dirName).Length > 0 Then
>       Me.GetFolders(dirName, folderNames)
>     End If
>   Next
> End Sub

ガツ様 深夜にもかかわらずご指導ありがとうございました、
DOBONのサンプルでファイル名を得ることができたのでそのまま使っていました。ArrayListの意味も初めてで理解できていませんでした。
そのため質問もおかしなことになってると思います。
やりたいことは、得られたファイル名の全パスから最後のファイル名だけを抜き取りたいのです。

C:\Documents and Settings\fuke\デスクトップ\TEST.Text → TEST.Text

「Failname」は、ArrayListと思いTESTのためのコピー用配列です。
やりかたがおかしいですよね。

なおこさんからご教授いただいていますので引きつ続きTESTしてみます。
ありがとうございます。

なおこ様
サンプルありがとうございます。
私はDOS時代のBASCの知識程度でここでも皆様にご迷惑をかけながらご教授
頂いています。

ご返信遅れますが、TESTしてみます。
ありがとうございます。
 
■No16647に返信(ふろふろさんの記事)
> 「Failname」は、ArrayListと思いTESTのためのコピー用配列です。
> やりかたがおかしいですよね。

名前もおかしいと思います。

Failname→Fail Name→失敗名
はじめまして。お世話になります。
ファイル名だけを抜き出したいのであれば、

System.IO.Path.GetFileName(全パス)

で取得ではだめでしょうか?
検討違いでしたら申し訳ありません。
■No16650に返信(庚さんの記事)
> はじめまして。お世話になります。
> ファイル名だけを抜き出したいのであれば、
>
> System.IO.Path.GetFileName(全パス)
>
> で取得ではだめでしょうか?
> 検討違いでしたら申し訳ありません。
>
>

皆様からのご指摘を参考に何とか目的を達成できました。
まだおかしいところもありますが下記のように最終ファイル名の抽出ができました。


結果的に配列個数は必要ありませんでした。

しかし他のロジックでも配列に収納されている数が分からないため
おかしな処理で逃げています。
お分かりの方お教えいただければ幸いです。

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

ListBox1.Items.Clear()
Dim strFile As String
Dim cunt As Integer = 0
Dim Werk01 As String

For Each strFile In System.IO.Directory.GetFiles("C:\Documents and Settings\fuke\会計", "*.txt")

Do
Werk01 = (Microsoft.VisualBasic.Right(strFile, cunt))
If Mid(Werk01, 1, 1) = "\" Then Exit Do
If cunt > 100 Then Exit Do
cunt = cunt + 1
Loop

Werk01 = (Microsoft.VisualBasic.Right(strFile, cunt - 1))
ListBox1.Items.Add(Werk01)

Next

End Sub

C:\Documents and Settings\fuke\会計¥kaihei1.Text → kaihei1.Text (最終結果)

ご報告にかえさせていただきます。
ありがとうございました。
解決済み!
こんにちは。

もう解決済みと言うことで、もしかすると見ていらっしゃらないかもしれません
が。

> 最後のファイル名だけを取り出しているのですが配列の個数が分からないと
> ループ脱出が出来ないのです。

とあったので、ファイル名じゃなくてフォルダ名なのかな?とずっと思っていま
した。

> C:\Documents and Settings\fuke\デスクトップ\TEST.Text

この例で言うと、
 Documents and Settings
 fuke
 デスクトップ
がフォルダ名で、「TEST.Text」がファイル名です。
基本的にファイル名は一つのみなので、最後のファイル名と書かれているとそう
いう誤解を招いてしまいます。

で、ファイル名を取得する場合はこういった無駄に複雑なロジックを駆使するよ
りも、庚 さんの指摘されている方法ですぐ取れると思います。
個人的にはあまり Microsoft.VisualBasic 名前空間は使用しない方がいいかなぁ
とも思いますし。

他にもはいこーんさんにも指摘されていますが、英単語のスペルは正しく書いた
方がよろしいかと。
今回のソースも Werk → Work だと思いますが(たぶん)Count を Cunt と書い
てセクハーラになる例もありますので :-) 特に掲示板に載せるような場合は気をつけ
ましょう。
解決済み!
■No16666に返信(ぽぴ王子さんの記事)
> こんにちは。
>
> もう解決済みと言うことで、もしかすると見ていらっしゃらないかもしれません
> が。
>
>>最後のファイル名だけを取り出しているのですが配列の個数が分からないと
>>ループ脱出が出来ないのです。
>
> とあったので、ファイル名じゃなくてフォルダ名なのかな?とずっと思っていま
> した。
>
>>C:\Documents and Settings\fuke\デスクトップ\TEST.Text
>
> この例で言うと、
>  Documents and Settings
>  fuke
>  デスクトップ
> がフォルダ名で、「TEST.Text」がファイル名です。
> 基本的にファイル名は一つのみなので、最後のファイル名と書かれているとそう
> いう誤解を招いてしまいます。
>
> で、ファイル名を取得する場合はこういった無駄に複雑なロジックを駆使するよ
> りも、庚 さんの指摘されている方法ですぐ取れると思います。
> 個人的にはあまり Microsoft.VisualBasic 名前空間は使用しない方がいいかなぁ
> とも思いますし。
>
> 他にもはいこーんさんにも指摘されていますが、英単語のスペルは正しく書いた
> 方がよろしいかと。
> 今回のソースも Werk → Work だと思いますが(たぶん)Count を Cunt と書い
> てセクハーラになる例もありますので :-) 特に掲示板に載せるような場合は気をつけ
> ましょう。

ぽぴ王子 様
色々ご指摘ありがとうございます。
浅学な知識で的確な表現ができず、誤解を招いたことお詫びします。
ほしかったのは、ArrayListで得られる全パスの中から最後のファイル名だけを抽出したかつたのですが、
C:\Documents and Settings\fuke\デスクトップ\TEST.Text → TEST.Text
このTEST.Text抽出する表現がうまく出来ずご迷惑をおかけしました。
DOBONのサンプルではArrayListの部分の格納が通常の配列と思い配列個数が知りたかったのです。(ArrayListの意味が分かっていませんでした)
その後色々調べているうちに、上記のようなサンプルがあり何とか目的を達成しました。
真に泥縄式な方法であることは承知しており、今も最適なコードを探しているところです。
今後ともよろしくお願いします。

DOBON.NET | プログラミング道 | プログラミング掲示板