Re^2: 多次元配列を複数のキーで並び替えするには

投稿者: 投稿日:2019/12/09(Mon) 18:46:07 No.2542

 こんにちは。

 提示いただいたコードでやりたいことができました。
 ありがとうございました。

 それでは。

Re: 「フォルダ情報」種類を使います

投稿者:smorkin 投稿日:2019/12/07(Sat) 13:32:26 No.2541

こんにちは、smorkin です。

ゆうと 様、ご回答ありがとうございます。

> -------------------
> パスは、フォルダ情報(「[デスクトップ]」)を作る
> フォルダ一覧は、パスから「*.*」を列挙する
> フォルダ一覧のすべての要素についてそれぞれ繰り返す
>   要素の名前&「 」&要素のサイズを報告する
> 繰り返し終わり
> -------------------

上記のプログラム例、確認いたしました。

> 「ファイル情報」種類と「フォルダ情報」種類は、比較的最近追加した種類ですので
> ややこしいですが、プログラムを参考にして下さい。

以前よりも少し複雑ですが、覚えていきます。
ありがとうございました。

Re: 多次元配列を複数のキーで並び替えするには

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/12/07(Sat) 11:41:26 No.2540

こんにちは。アークです。

こういう事でしょうか。
-----------------------------------------------------------------------------------
配列は、{
{「A」, 「テスト1」, 20},
{「B」, 「テスト2」, 21},
{「A」, 「テスト3」, 22},
{「B」, 「テスト4」, 23},
}
配列を『
それを{左,右}とみなす
もし左(1)<右(1)なら
-10を返す。
他でもし左(1)>右(1)なら
10を返す。
そうでなければ
  もし左(3)<右(3)なら
  -1を返す。
  他でもし左(3)>右(3)なら
  1を返す。
  そうでなければ
  0を返す
  もし終わり
もし終わり
』で並び替える
配列を改行で繋げて表示する

多次元配列を複数のキーで並び替えするには

投稿者: 投稿日:2019/12/07(Sat) 10:30:05 No.2539

 お世話になっております。

 多次元配列を匿名手順で並び替えようとしています。
 この際、複数のキーで並び替えをするには、どうしたらよいのでしょうか。
 とりあえず、サンプルソースです。

----- サンプルソース -----
ーーテスト用の配列を作成。
ーー今回は、4×3の配列を作成しているが、実際に扱おうとしている配列は、もう少し要素が多い。
配列は、{
{「A」, 「テスト1」, 20},
{「B」, 「テスト2」, 21},
{「A」, 「テスト3」, 22},
{「B」, 「テスト4」, 23},
}
配列を『
それを{左,右}とみなす
もし左(1)<右(1)なら
-1を返す。
他でもし左(1)>右(1)なら
1を返す。
そうでなければ
0を返す
もし終わり
』で並び替える
配列を改行で繋げて表示する
--------------------

 このソースコードを実行すると、単純に下記の結果が得られます。

----- 実際の実行結果 -----
{A,テスト3,22}
{A,テスト1,20}
{B,テスト4,23}
{B,テスト2,21}
--------------------

 ただ、今回は2番目の要素でも並び替えを行いたく、下記のような実行結果にしたいと考えています。

----- 想定される実行結果 -----
{A,テスト1,20}
{A,テスト3,22}
{B,テスト2,21}
{B,テスト4,23}
--------------------

 このような順番に並び替えるには、並び替えの手順をどのように書けばいいんでしょうか。
 単純に1番目の要素で並び替えを行ったあと、2番目の要素で並び替えを行うだけではうまくいかず、最初に宣言したときと同じような並び順になってしまいます。
 何かよい方法があれば、アドバイスをいただけると幸いです。

 以上、よろしくお願いいたします。

Re: 260文字を超えるパスの対応について

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/12/07(Sat) 10:26:56 No.2538

こんにちは。アークです。

御承知の様にポリシーを変更する事で260文字の制限を解除する事はできます。
しかし、現状ではウィンドウズ標準のソフトでさえ全て対応している訳では無いようです。
また、解除したところでフォルダの最大長248文字と、
それを含めたファイル名の最大長が260文字というのは一部に残っているので、
そこから先はフォルダを作る事ができません。
…なので今は可能であれば使わない方が良いようです。

但し何としても取得したいという事であればできなくも有りません。
例えば「dir」コマンドは対応していますので、
その結果から必要な内容を取り出す事で可能です。
データ量の違いは有りますがスクレイピング&マイニングの手法です。
例によってあまりスマートな方法では有りませんが機能します。

Re: .NET Frameworkの仕様です

投稿者: 投稿日:2019/12/07(Sat) 08:18:42 No.2537

 こんにちは。

 やはりそうですよね。
 了解しました。
 ありがとうございました。

 それでは。

「フォルダ情報」種類を使います

投稿者:ゆうと 投稿日:2019/12/06(Fri) 19:36:06 No.2536

こんにちは ゆうとです。

> デスクトップから「報告書.xlsx」を取得してそのサイズを報告する
> という記述があるのですが、実際のプログラムでどう書けばいいのかが
> よくわかりません。

「フォルダ情報」種類の説明の方がわかりやすいかと思います。
https://rdr.utopiat.net/docs/reference/core/folderinfo.htm

「名前」「絶対パス」「サイズ表記」の各設定項目は、
「ファイル情報」種類のオブジェクトでないと取得できません。

調べたいパスを「フォルダ情報」種類に指定して作っておき、
「列挙する」手順で、そのフォルダにあるファイル名を調べます。
「列挙する」手順は、「ファイル情報」種類の配列なので、各設定項目が使えます。

-------------------
パスは、フォルダ情報(「[デスクトップ]」)を作る
フォルダ一覧は、パスから「*.*」を列挙する
フォルダ一覧のすべての要素についてそれぞれ繰り返す
  要素の名前&「 」&要素のサイズを報告する
繰り返し終わり
-------------------

なお、『フルパスで〜のファイルの一覧』は、文字列の配列を返す手順ですので、
文字列のパスでは「〜の名前」などの書き方が使えません。

「ファイル情報」種類と「フォルダ情報」種類は、比較的最近追加した種類ですので
ややこしいですが、プログラムを参考にして下さい。

.NET Frameworkの仕様です

投稿者:ゆうと 投稿日:2019/12/06(Fri) 18:52:37 No.2535

こんにちは ゆうとです。

.NET Framework 4の仕様で、260文字以上の長いパスはエラーとなるようです。
これは古いWindowsとの互換性を維持するためで、基本的には260文字以上のパスを使用できないと考えて下さい。

ただプロデル側でも設定の変更で一部のケースは対処可能なようです。ただ修正箇所が多数あり、対処しても実行可能ファイルではエラーとなるなどして完全な対応には手間が掛かりますので積極的には対処しません。
260文字以上となるのは希なケースと思いますので、基本的には対応できない、と考えて下さい。

パスが長くならないようにフォルダ名の作り方を改めるなどして、作り方の改良をお願いします。

よろしくお願いします。

Re^2: ファイルのサイズを取得するには

投稿者:smorkin 投稿日:2019/12/06(Fri) 12:51:03 No.2534

こんにちは、smorkin です。

陸 様、早速のアドバイス、ありがとうございます。

> 「 (ファイルのフルパス) 」のファイルのサイズを表示する

> でいけると思います。

はい、「サイズ」と「更新日」は取得することが出来ました。
しかし、「名前」「絶対パス」「サイズ表記」は、
エラーになってしまい、取得出来ませんでした。

引き続き、この件に関して情報をお待ちしております。
よろしくお願いいたします。

//プログラムのサンプル
一覧は、(フルパスで「[デスクトップ]」のファイルの一覧)
一覧を要素にそれぞれ繰り返す
要素のファイルの×××を報告する //×××は「名前」「サイズ」等
繰り返し終わり

//エラーメッセージ
『要素のファイル』という部分で
文字列型には「ファイル」という設定項目または手順がありません。
[エラー番号302]

◆動作環境情報◆
プロデル 1.6.983
Windows 10(64)
メモリ:6.92 GB

260文字を超えるパスの対応について

投稿者: 投稿日:2019/12/05(Thu) 22:09:03 No.2533

 お世話になっております。

 最近、260文字を超えるパスを扱うことがそれなりにあるんですが、プロデルではうまく扱うことができないようで、「System.IO.PathTooLongException」が発生してしまい、困っています。
 主に利用する操作としては、ファイルサイズの取得、更新日や作成日等の取得、ファイルの属性の取得などです。
 C#の使用上仕方ないのでしょうか。
 何か方法があれば、教えていただけると幸いです。

 以上、よろしくお願いいたします。

▲ページの先頭へ

- WebForum -