過去の桐井戸端BBS (桐ver.8)
14067 桁数の違う連番入の文字列を並べ替えたい アックン 2001/11/19-13:46
すみませんが、お時間ください。

ファイル名を取得したテーブルがあります。拡張子はいろいろです。
下記例のようにファイル名を並べ替えるには、どうすればいいでしょうか。

(すべて同一フォルダ内のファイルです。)
a)元の並び順(昇順または辞書順)
abc1.bmp
abc10.bmp
abc100.bmp
abc11.bmp
   :
abc19.bmp
abc2.bmp
abc20.bmp
   :
abc3.bmp
abc30.bmp
   :
abc99.bmp

b)こういう順にしたい
abc1.bmp
abc2.bmp
abc3.bmp
  :
abc10.bmp
abc11.bmp
   :
abc19.bmp
abc20.bmp
   :
abc30.bmp
  :
abc99.bmp
abc100.bmp

実際のファイル名は abcXX以外にも様々なものが混在してます。(例:1.jpg〜10.jpgという1群、defg1.bmp〜defg10.bmpという1群他)
このような一連のファイル群同士の並び順はどうであってもかまいません。
数字の桁が揃っていないファイル名の一群をその群の中で並べ替えたいというのが希望です。
よろしくお願いします。

先日、同様の質問を【多遊】さんの掲示板で見ましたが、回答がつかなかったみたいですね。
私もこの件は以前から手つかずのままです。

アックン(=^・^=)
14079 Re:連番入ファイル名を並べ替える Ogo 2001/11/19-15:54
記事番号14067へのコメント
え〜っと、ファイル名を連番部分とプリフィックス部に分けるのが前提で、これさえ思い付けばできたも同然。 (^^)

私ならば1項目で連結した合成ファイル名を作りますが、理解しやすいように、項目をたくさん作成します

[ファイル名]:[PreFix]:[連番]:[拡張子]:[整列名]
 (文字列) :(文字列):(数値):(文字列):(文字列)
abc1.jpg  :abc   :  1 :jpg   :abc00001.jpg
abc21.JPG  :abc   :  21 :jpg   :abc00021.jpg
abc10.jpg  :abc   :  10 :jpg   :abc00010.jpg

[Prefix]
#条件選択(#is数字(#ファイル名([ファイル名],2),0)>0,
 #部分列([ファイル名],1,#is数字(#ファイル名([ファイル名],2),0)-1),
  1,#ファイル名([ファイル名],2))

[連番]
#条件選択(#is数字(#ファイル名([ファイル名],2),0)>0,
 #数値(#部分列(#ファイル名([ファイル名],2),
   #is数字(#ファイル名([ファイル名],2),0))),
  1,0)

[拡張子]
#LC(#ファイル名([ファイル名],4))

[整列名]
[Prefix]+#文字列([連番],5)+"."+[拡張子]


もちろん、[整列名]で整列します。



14082 Re:連番入ファイル名を並べ替える(補足) Ogo 2001/11/19-16:21
記事番号14079へのコメント

http://www.vector.co.jp/vpack/filearea/win95/util/file/name/seq/index.html

の中で、テキトーなソフトを選んで連番を打ち直す
(いや、ファイル名の統一化を図るが正解)という
方法も補足的に使えます。


14083 Re:連番入ファイル名を並べ替える アックン 2001/11/19-16:26
記事番号14079へのコメント
あまりにレスが早くて、、まだ式を全然読んでない段階ですけど(^^;、
ぼくが聞きたかったのはまさにそういうことでして、数字部分とプレフィクス部分
(と呼ぶんですか)をどうやって分離できるかです。

で、プレフィクス部分が異なる複数群がたくさん同一フォルダに存在するという、難しい前提があります。
さらに数字部分の構成も群によってまちまちですし、数字だけという群もあります。

そもそも自分で付けたファイル名ではないから、これをちゃんとした順に並べ替えてから
任意のファイル名で変更したいんですね。それが目的です。

関連した件でまだ他のツリーを起こして質問するつもりでおります。<(^^;

アックン(=^・^=)

14086 Re:連番入ファイル名を並べ替える(補足) アックン 2001/11/19-16:39
記事番号14082へのコメント
もう2年ほど前のことなんですが、そのvectorのディレクトリにあるファイル名変更ソフトをすべてあさったところ、
自分の目的に合致するものがありませんでした。
そこで、桐で作ったんです。(という話はもう書いたっけ?)
ただ当時はイベントに関する情報が極端に不足していた時期で、手探りの状態でした。
プレフィクス部分やら連番部分を10個ほど任意に組み合わせるようにしてます。

アックン(=^・^=)

14094 Re:連番入ファイル名を並べ替える 【多遊】 2001/11/19-18:01
記事番号14083へのコメント
アックン(=^・^=)こんにちは

#住所表示番号([ファイル名])なんかいかがですか?
aaa1.bmp
bbbb2.bmp
ccccc3.bmp
と、なってても可能なような気がします。

もしフォルダー名に数字が使用されてなかったら、
#住所表示番号([フォルダー名付きファイル名])もいけそうですね。
(ちょっと出先からですのでひとことだけ)
もちろん未確認です
14096 Re:連番入ファイル名を並べ替える アックン 2001/11/19-18:27
記事番号14079へのコメント
Ogoさん、できたよ!(^.^)
いやあ、聞いて良かった。いえね、近頃ときたら自分で考えるのがだんだんおっくうになってきましてね。.....((((^^;//きゃい〜ん

さて、計算式は明日じっくり読んでみます。
やりたかった結果はまさにこのとおりで、連番の桁数を増やすことでした。
ありがとうございました。

アックン(=^・^=)
14101 Re:プレフィクス (どうでもいいけど) Ogo 2001/11/19-19:56
記事番号14083へのコメント

>数字部分とプレフィクス部分(と呼ぶんですか)

肝になる可変部分が数字で、その前 (Pre) に存在する
固定 (Fix) 文字列ですので、プレフィックス(またはプリフィックス)です。

後ろに固定文字列があれば PostFix ですね。


14104 Re:連番入ファイル名を並べ替える 【多遊】 2001/11/19-20:45
記事番号14094へのコメント
>Ogoさん、できたよ!(^.^)
を、聞いて安心です。
無責任に書いた「#住所表示番号([ファイル名])」は、やはり使用できませんでした。

理由(出来ない例)
#住所表示番号([])は、任意の文字列から簡単に数字を抽出する関数と思ってましたが、
実は文字数が、5桁未満には反応しません。
「bbbb2.bmp」→「2」、「ccccccc10.bmp」→「3」を返しますが
「aaa1.bmp」→「」何も返しません。
※5桁→#ファイル名([ファイル名],2)での判定です。

ファイル名が、「aaa10a.bmp」「aaa10b.bmp」「aaa10c.bmp」などがあれば、
あと一つ項目を増やさなければならないのでしょうね

戻る