みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win8、FM12
いつもお世話になっています。あるとです。
質問1
画像のファイル名をGetAsTextで取得したもの、100_20131211_101901(ID_日付_時間)、を各フィールドに分けるまでは出来ました。
ID:100
日付:20131211
時間:101901
これらを
ID:100
日付:2013/12/11
時間:10:19:01
としたい。
Left(日付;4)&"/"&Middle(日付;5;2)&"/"&Right(日付;2)
これで、日付フィールドは出来たのですが、力技というか原始的というか、もっと綺麗に作れるのではないかと。
大量に画像を取り込むさいに、処理速度に使用関数が増えると計算が単純であっても差が生じてくるのでしょうか。このくらい簡単なものでも。
質問2
画像のファイル名をGetAsTextで取得した・・・と書いたのは、レコードのインポート→ファイルと単体でのこと。
これをレコードのインポート→フォルダとした場合、image:/F:/画像フォルダ名/100_20131211_101901、となるため分解したさい、IDがimage:/F:/画像フォルダ名/100となってしまいます。
ID:100となるようにしたいと思っています。
取得元の画像フォルダが、違ってもインポート出来るようにすることも可能でしょうか?
image:/F:/メーカー/もあれば、image:/F:/メーカー/分類/12月分/となることもあるため。
よろしくお願いします。
あまり変わらないけど
Replace (Replace ( 日付 ; 7 ; 0 ; "/" ) ; 5 ; 0 ; "/" )
処理速度は変わらないでしょう。
最後の「/」の位置から右側30文字くらい?を抜き出せばいいのでは。
日付、時間はそれぞれ
計算フィールド日付タイプ・時刻タイプとして、
Date関数
Time関数
などで変換できます。
画像ファイルのパスがどう有れ、その最後の「/」以降がファイル名です。
それを得るには「/」を改行に変えれば、
RightValues関数
で得られます。
ただし、この関数はテキストの最後に改行コードが付いてきます、お気をつけを。
Offline
最後に改行がいやならGetValueにする。
Let(L=Substitute(テキスト;"/";¶);
GetValue(L;ValueCount(L))
)
最後の/だけReplaceすればCountしないでもいいか。
計算時間は、全置換で測ってみればいいでしょう。
皆様、ありがとうございます。
こんなにも、アドバイスをいただけて感謝。
>最後の「/」の位置から右側30文字くらい?を抜き出せばいいのでは。
Travellerさんへ
文字数が決まっていれば、Right関数で抜き出せたのですが、IDが増えていくと変化してしまうので出来ず。
最後の「/」以降だけを抜き出す方法があるのでしょうか?
>Date関数Time関数などで変換できます。
チポさんへ
フィールド日付:20131211
フィールド日付2(計算、日付): Date ( Month ( 日付 ) ; Day ( 日付 ) ; Year ( 日付 ) )
としてみたものの、回答は「?」になってしまいました。
どのようにすれば、変換できたのですか?
>最後に改行がいやならGetValueにする。
tatituteさんへ
チポさんに教えていただいた、RightValues関数になじみがないので、まずこれがどのようなものか勉強してみます。
これがわからないと、せっかく書いていただいたものが理解できないと思うので。
>レコードのインポート→フォルダとした場
ファイルパスでなくファイル名をインポートすれば?
>フィールド日付2(計算、日付): Date ( Month ( 日付 ) ; Day ( 日付 ) ; Year ( 日付 ) )
日付フィールドの値が日付になってないのでMonth等には使えません。
自分でやってるようにMiddle等で切り出して使う。
最後の位置を探すのは、Positionの回数を-1にする。
GetValue(Replace(日付;Position(日付;"/";Length(日付);-1);1;¶);2)
パスから必要な部分を抜き出すのは
Middle ( パス ; Position(パス;"/";Length(パス);-1)+1 ; 30 )
とかで。
Replace (Replace ( 日付 ; 7 ; 0 ; "/" ) ; 5 ; 0 ; "/" )
は
取り出した日付が20130101のように8桁の場合です。結果は日付。
>ファイルパスでなくファイル名をインポートすれば?
tatituteさんへ
Get(ファイル名)、ですと現在使用してるFMのファイル名になってしますよね。画像のファイル名を取得できる関数はあるのでしょうか?
レコードのインポート→ファイルだとファイル名だけで表示してくれるのですが、レコードのインポート→フォルダdとファイルパスになるのですよ。
>日付フィールドの値が日付になってないのでMonth等には使えません。
>自分でやってるようにMiddle等で切り出して使う。
やはりそうなるのですか。
>Middle ( パス ; Position(パス;"/";Length(パス);-1)+1 ; 30 )
>Replace (Replace ( 日付 ; 7 ; 0 ; "/" ) ; 5 ; 0 ; "/" )
Travellerさんへ
これら正常動作しました。すごく素直に動いてくれて良いですね。
Travellerさん、チポさん、tatituteさんへ
ありがとうございます。
互いにフォローしながら回答いただき、とてもとても分かりやすく助かりました。
これで、作りたいファイルが出来そうです。今日中に、ここまで進めるとは予想もしておらず、うれしい限りです。ありがとうございました。
>レコードのインポート→フォルダdとファイルパスになる
インポート元は
イメージ
ファイル名
ファイルパス
サムネイル
なので、ファイル名には名前だけ入りますが。
レコードのインポート→ファイルだとファイル名だけで表示してくれるのですが
ファイルがフォルダの間違い
レコードのインポート→フォルダdとファイルパスになるレコードのインポートフォルダ
レコードのインポート自体が、
ピクチャを挿入の間違い。
この場合は直接、ファイル名のみを得ることはできませんね。
Offline
私の書き方が悪かったですね。チポさん、ありがとうございます。timさん、わかり難くて、すみません。
画像(オブジェクト)をインポートする→そのファイル名(テキスト)を取得しようとしました。
レコードのインポート→ファイル、画像ファイル1つだけ指定(複数選べませんが)→オブジェクトへ挿入。フィールド名:image(オブジェクト)。
挿入した画像のファイル名を所得するため。フィールド名:imageファイル名(計算、テキスト)「GetAsText ( image )」。例:100_20131211_101901(ID_日付_時間)
同じように、インポート→フォルダ、一括でオブジェクトに画像を入れていくと、image:/F:/画像フォルダ名/100_20131211_101901というファイルパスでフィールド名:imageファイル名に表示されます。
ここから、100_20131211_101901だけをまず抜き出したい。tatituteさんの式を使わせていただきますと。
フィールド名:ファイル名(計算、テキスト)「Let(L=Substitute(imageファイル名;"/";¶);GetValue(L;ValueCount(L)))」、で取得できた。
あとは、個々のIDや日付などに分解。日付や時間は、使いやすいように変更する。となります。
ファイル名の取得、言われてたことがようやくわかりました。
インポート元のフィールド(画像ファイル) インポート先のフィールド(自分で作成したFMファイル)
イメージ → image(オブジェクト)
ファイル名 → ファイル名(テキスト)
これだけで、ファイル名の取得出来たのですね。
イメージ→image(オブジェクト)
これだけをインポートして、わざわざフィールド1つ作って、計算式GetAsText使ってファイル名を取ろうとしていたためです。
レコードのインポート→ファイルでは、計算式GetAsTextでファイル名の取得になるが、
レコードのインポート→フォルダでは、計算式GetAsTextでファイルパスの取得になってしまう。
tatituteさんの#6での回答は、私がここを理解してなかったことでわからずと。
勉強にはなりますが、まだまだ知らないことだらけですね。
まだ間違ってる。
>レコードのインポート→ファイル、画像ファイル1つだけ指定(複数選べませんが)→オブジェクトへ挿入。フィールド名:image(オブジェクト)。
インポート>ファイルでは画像は選択できません。(ファイルタイプを全てにすると選択はできるけど「変換できません」で入らない)
インポート>ファイルでオブジェクトフィールドにインポートできるのは、FMファイルの場合だけです。
>レコードのインポート自体が、
>ピクチャを挿入の間違い。
です。
元画像の格納場所があまり意味無いのなら外部保存にした方が楽になれる?
timさんへ
>ピクチャを挿入の間違い。
単体で画像ファイル、ピクチャ挿入でいれてたのかな?自分のやり方がわからなくなってきた。
インポート→ファイルからだと、言われるように出来ないので、ピクチャを挿入でやっていたのかな。
Travellerさんへ
>元画像の格納場所があまり意味無いのなら外部保存にした方が楽になれる?
外部保存を最近知ったので、こちらも学習中です。
取り込んだ画像を外部保存先へするというのは出来るようになったのですが、その外部保存先へ画像を追加しただけではレコードが増えるわけでは無いですよね。
オープン格納でやってみましたが、予想通り変化なく。
スクリプト組んで、それをスクリプトトリガ使ってファイルを開くもしくはそのレイアウトを開いたときに、読み込むという方法になるのでしょうか?
私はまだ殆どv.10の環境なので12は詳しくない。
画像(イメージ)はオブジェクトフィールドにインポート、挿入、ドラッグ&ドロップだろうが
全部指定の外部フォルダに保存されるので管理は楽ですし、FM共有でもクライアント側から画
像を挿入できます。実体保存だけど非外部保存の実体挿入に比べてサイズも小さいとか?
GetAsTextの結果も統一されますし。pdfはまた別。
外部保存にすると、ファイルが軽くなるのが良いですね。画像を読み込む動作は、あまり変わりないように感じます。
従来が内包すると1GBになってしまうのを、FMファイル1MB+外部1GBというくらいになります、画像ばかりだと。
外部保存先も複数設定できますので、オブジェクトAではフォルダAに、オブジェクトBはフォルダBへとすることも可能。
インポートや挿入、ドラッグ&ドロップをおっしゃるように、普通に使えば仕訳してくれます。オープン格納ですと、フォルダの中を直接みれるので画像だけを探すにも便利です。
目的の画像が入ったレコードが見つからない、元画像がどこかわからない、けど資料で使うから欲しい・・・というときにね。
セキュア格納にしますと、名の通りファイル名も拡張子も変わってセキュリティかかるので、顔写真といった個人情報保護や社外秘には良いかと。
これも、オブジェクトCはオープン格納に、オブジェクトDはセキュア格納と分けることも可能。
ただし、一方通行になるかと。
画像→オブジェクトに挿入→外部保存、は出来ます。
画像→外部保存→オブジェクトに・・・は自動ではならないようです。入れた画像をインポートでフォルダごと取得では出来ますが、それだと画像→オブジェクトに挿入と同じことなりますね。
画像→外部保存フォルダに入れる→ファイル開く→自動で追加更新、と出来ると便利なのですが。
インポートとスクリプトなどで、調べてみたいと思います。
案をいろいろ出していただき感謝です。
・・・出来ました。
スクリプト作成、レコードのインポートを選択。
データソース指定→外部保存先のフォルダ。
インポート順の指定→一致するレコード更新(ファイル名をイコールで)、一致しないものは新規登録。
この一行のスクリプトで済みました。
ただ、毎回インポート作業するのは時間かかりますね。時間短縮のため事前に過去1週間分の追加分だけ、とでも出来れば良いですが、さすがにそれは出来ないので。
ボタン設置して、とりあえず使えるようにしてみたいと思います。
インポート順の指定が記録しているので、間違えることは無くなるかな。
あとは、重複がでないかのチェック手段も考慮してみます。
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 611.31 KiB (Peak: 627.85 KiB) ]