みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも大変参考にさせて頂いております。
検索してトピがないか探したのですが自分のやりたいことが見つけられなかったので教えて下さい。
環境はwin7・fmp12です
別のソフトから落とし込んだ.csvファイルが200ほど入ったフォルダが有ります。
中身の書式はすべて一緒です。
このフォルダの中身のcsvファイルを一括でインポートしたいのです。
フォルダのインポートでtxtファイルであれば一括でインポートできるということはわかりました。
また、csvファイルをコマンドプロンプトでcopy *.csv all.txtをするとフォルダの中身がすべてtxtファイルになることもわかり
そのフォルダを、ファイルパスフィールドを作り、一括インポートして、このフィールドを利用してcsvのインポートができることもわかり、
実際出来ました。
これをスクリプトでボタンひとつで実行したいのです。いろいろ試してみたのですが、どうしてもできなかったのでスクリプトを教えていただけないでしょうか?
落とし込んだファイルは、c:直下にcsvファイルと言うフォルダを作りその中に格納しています。
コマンドプロンプトでcopy *.csv all.txtをすると中身がすべてtxtファイルになるので別の場所にインポートフォルダというのを作りcsvファイルはコピーしておき、
ファイルパスを取り込んだ時に取込ファイルパスという計算フィールドを作り、Substitute でファイルパスを変更して取り込むスクリプトまでは到達しました。
教えていただきたいのは、cドライブ直下のcsvフォルダにcsvファイルを入れたあとからのスクリプトです。
csvフォルダをコピーしてインポートフォルダを作る ←コピーしてフォルダを作らなくてもcsvフォルダの中にtxtファイルが作られてもいいです。
コマンドプロンプトを起動して.csvを.txtに全部変換 ←eventを使ってみたのですがコマンドプロンプトを立ち上げることができませんでした。
インポートフォルダをインポートする
ここまでを教えていただけないでしょうか
これは初心者の私が考えられる方法でしたので、全く違う方法でも同じ結果が見いだせるのなら全然構いません
どうぞよろしくお願いします。
訂正があります。
コマンドプロンプトでcopy *.csv all.txt ☓
"C:\csv" ren *.csv *.txt が正しいです
Last edited by kazu10 (2014-05-03 20:23:10)
Offline
お尋ねします。
.csv形式ファイルのレコードインポートと.txtファイルのフォルダ一括インポートは、基本的にその機能、目的と結果が違います。
手法ではなく、もともとの目的と求める結果を具体的に教えてください。(.csvのデータ内容とFMインポート結果内容との関係など具体的に。)
Offline
csvのインポートをしたいというんだから、
Eventを送信[cmd /c copy c:\csv\*.csv c:\csv\all.txt]
でファイルを1つにまとめて、all.txtをインポートすればいいのでは。
Offline
copyで連結する場合、各CSVの最後の行にも改行がないとだめかもしれませんね。
Offline
Hiro様
wader様
ご返答有難うございます。
お尋ねします。
.csv形式ファイルのレコードインポートと.txtファイルのフォルダ一括インポートは、基本的にその機能、目的と結果が違います。手法ではなく、もともとの目的と求める結果を具体的に教えてください。(.csvのデータ内容とFMインポート結果内容との関係など具体的に。)
結果として求めたいことは、1フォルダに複数ある.csvのデータをインポートしたいのです。
.csvファイルには個人の1ヶ月分の勤怠データが入っています。
ファイルの中身は、
1行目 名前
2行目 勤務先
3行目 年月
4行目 日 出社時間 退社時間 総労働時間 ・・・・
インポートしたいデータは
勤怠テーブル
フィールド
名前 勤務先 年月 日 出社時間 退社時間
というようなテーブルにフォルダに格納されている200ほどの.csvファイルを取り込みたいのです。
csvのインポートをしたいというんだから、
Eventを送信[cmd /c copy c:\csv\*.csv c:\csv\all.txt]
でファイルを1つにまとめて、all.txtをインポートすればいいのでは。
この場合だとtxtファイルにすべてまとまるのですね。
csvファイル自体は1行目からデータが入っているわけではないのですが、取り込んだ内容からでもフィールドに値を入れることができますか
厄介なことに取り込むcsvファイルの1~3行目がフィールドとして使いたい項目なので、私には取り込んだ内容からでもフィールドに値を入れることできないのです。
したがって200のファイルを1つインポートして1行目をコピーしてフィールドに移動して貼り付け全置換、その後にloopでと考えておりました。
私の考え方がおかしいと思いますので、良い方法を教えていただけるとありがたいです
Offline
csvファイル内の複数レコードを、FMの1レコードへ丸めてインポートするなら、フォルダ内txtファイルの一括インポート機能がベストと思います。(なお、必要な個別フィールドへの切り出し配分は、インポートの後で算出します。)
その為には、
●ファイル拡張子.csv → .txt への改名。
これは、「Eventを送信」で、
"cmd /c ren c:\csv\*.csv *.txt"
を送信すれば、csvフォルダ内の全csvファイルを一括改名できます。
●1レコード1フィールドにインポートされた複合データの所定フィールドへの切り出し。
切り出しは、データ内容の詳細が分からないので、具体的な説明はできません。
例えば、インポートフィールドの結果データが、
-----------------------------------
"山田 太郎"
"新宿店"
"201405"
"5","9:0","17:0","9:0","・","・","・","・"
-----------------------------------
とすると、
・改行がダブっていたら、Substitute(自己フィールド;Char(10);"") でダブり除去します。
・"クォート囲いされていたら、 Substitute(自己フィールド;"\"";"") で除去します。
・行の内容を切り出すのは、 GetValue(自己フィールド;行番) を使います。
・後は実際データの詳細書式が分からないと具体的にお答えできません。
Last edited by Hiro (2014-05-05 02:51:40)
Offline
Winのコマンドは全く分からないけど
フォルダ内の全csvファイルのパスをテキストとして1ファイルでそのフォル
ダ内に出力はできないのですか。
それができたら、まとめてインポートするとパスのテキストファイルの内容
(全csvのファイルパス)だけが1フィールドに入りそうですから、1行ずつ
取り出してインポートしたら.txtにする必要が無いかも?と思って・・・
Cmd /c dir /b c:¥csv > c:¥csv¥dir.txt
とかで。
しかし、もちょっとマシな形式で取り出せないんですかね。csvの体をなしてない。。。
返信がおそくなりすみません
Hiro様 Traveller様 めいこ様ご返答有難うございます
Hiro様 すいません。内容を理解しきれていませんでした。
具体的な数字入れるべきでした。申し訳ございません。
教えていただいた方法を試してみました。
txtに変換しただけでは取り込めない気がします。
csvのままだと下記の詳細のカンマがない状態です
日付:2014年03月
組織名:本店
スタッフ名:山田 太郎
日,曜日,出社,退社,
1,土,17:59,01:20,
2,日,17:53,22:18,
3,月,17:56,23:03,
4,火,
5,水,
6,木,17:55,21:51,
・
・
・
合計,85.03,0.00,29.67,
上記のように31日(30日)まで(30日)の分まで入っていて合計行まであります。
はじめの日付・組織名・スタッフ名の部分はカンマ区切りにもなっていません。
この場合txtファイルに変換してもインポートできませんか?
Traveller様
Winのコマンドは全く分からないけど
フォルダ内の全csvファイルのパスをテキストとして1ファイルでそのフォル
ダ内に出力はできないのですか。
確かにcsvファイルのファイルパスを1フィールドに入れることができればcsvをtxtに変換する必要はないです。
ただ、そのcsvのファイルパスの出力方法がわかりません。
めいこ様
Cmd /c dir /b c:¥csv > c:¥csv¥dir.txt
とかで。しかし、もちょっとマシな形式で取り出せないんですかね。csvの体をなしてない。。。
Cmd /c dir /b c:¥csv > c:¥csv¥dir.txt 試してみましたが、ファイルが見つからない と出て機能してくれませんでした。
これはどういうことをする内容なのでしょうか?
マシな形式で取り出せたらもっと簡単だったんですがこれ以上の形式で取り出せないんです。
Offline
CSVの結合ファイルが出来たら
テーブルA(日付、組織名、スタッフ名)とテーブルB(スタッフ名、日、曜日,出社,退社)を作成し
スタッフ名でリレーションすると想定して、EXCELで切り分けしました
シート「CSV」に貼りつけて(色付きのセルのみ有効)マクロ実行して下さい
このサイトの主旨に反するなら、このコメント削除お願いします
超初心者の提案なので参考までに・・・
1 結合CSVをEXCELで開き上書き保存する
この時点で、タブ/コンマ区切りを考える必要がなくなります
2 ダミーのテーブルを作成する(フィールド数は、日,曜日,出社,退社・・より多めに) → 以降、ABCと記します
3 「レコードの指定」をFMに任せてABCにインポートします
ABCを表形式で確認すると、EXCELと同じ配置になってると思います
3 ABCの第一フィールドをリレーションに追加します
スクリプトで関連フィールドとして使うため
4 ABCの第一フィールを基にloop処理します
条件1 → 日付の文字が含まれる場合の処理
条件2 → 組織名の文字が含まれる場合の処理
条件3 → スタッフ名の文字が含まれる場合の処理
条件4 → 値が1以上31以下の場合の処理
Cmd /c dir /b c:¥csv > c:¥csv¥dir.txt 試してみましたが、ファイルが見つからない と出て機能してくれませんでした。
円マークの文字コードが違ってる。Windowsでこの掲示板に書き込むとバックスラッシュになるんだけど、この発言はなってないので、コピペすると実行できません。
「フォルダ内の全ファイルのパスをテキストとして1ファイルでそのフォルダ内に出力」する手順です。
【csvファイル内容】
-----------------------
日付:2014年03月
組織名:本店
スタッフ名:山田 太郎
日,曜日,出社,退社,
1,土,17:59,01:20,
2,日,17:53,22:18,
3,月,17:56,23:03,
4,火,
5,水,
6,木,17:55,21:51,
・
・
・
合計,85.03,0.00,29.67,
-----------------------
このフォーマット書式がcsvの体を成して無いので、csvインポート機能は使えません。
ココは取合えず、csvファイル内容をテキスト文としてFMの「csv内容」フィールドへ全文格納して、これから必要な要素を各所定フィールドへ切り出す策が良さそうです。
全csvファイルの内容全文をフィールド格納するのは、「テキストファイルのフォルダ一括インポート」機能が最善です。
【FMインポート結果の表示例】
-----------------------------------------------
スタッフ名 山田 太郎
組織名 本店
年月 2014年03月
合計1 85.03
合計2 0.00
合計3 29.67
===<ポータル>===
1(土) 17:59 01:20
2(日) 17:53 22:18
3(月) 17:56 23:03
4(火)
5(水)
6(木) 17:55 21:51
・
・
・
31(月) 17:56 23:03
===</ポータル>===
-----------------------------------------------
この一連の処理をスクリプト一発で実行できるようにしたサンプルをアップしました。
●サンプル「csvファイル一括インポート.zip」→ http://yahoo.jp/box/AHNvLI
【修正履歴】
2014/05/07 20:45 不良ファイルパスなどの問題で動作不良があったのを改善しました。修正版を上URLから再ダウンロード下さい。
Last edited by Hiro (2014-05-07 21:03:55)
Offline
FM12始めたばかり様
tim様
Hiro様
ご返答有難うございます。
FM12始めたばかり様
申し訳ございません。今回はもし私が使うならこの方法でもいいのでしょうが、ちょっと手間を省きたいので一発動作にしたいと思っています。
tim様
ご指摘の通りコピペでした。
Hiro様
素晴らしいサンプルありがとうございます。
まだ解析は全然出来てないのですが、私の実際に使いたいファイルでインポートするの取り込み動作までしっかりしてくれるのですが、
文字化けしてしまいます。
せっかく作っていただいたこのサンプルを是非活用させていただきたいのですが、文字化けの原因わからないですよね?
図々しいお願いだとはわかっておりますが、お返事いただけるとありがたいです。
すみません。おこがましいですが一応実際のcsvファイル載せます
https://drive.google.com/file/d/0B_Llwx … sp=sharing
再度編集させていただきます。
今自分で確認したのですがexcel以外で開くと文字化けしているようでした
Last edited by kazu10 (2014-05-07 23:45:31)
Offline
> 一応実際のcsvファイル載せます
> https://drive.google.com/file/d/0B_Llwx … sp=sharing
> 今自分で確認したのですがexcel以外で開くと文字化けしているようでした。
csvファイルの実際の中身は、csvなんかでなく、tab形式ですよ!!!
詳細は、
・タブ区切り形式 ⇒ カンマ区切りに準拠した切出し計算式を大幅改修。
・改行はWin標準のCR+LF ⇒ FMの改行はCRなので2重改行となる ⇒ LF(10)を除去してダブり改善
・文字コードはShift_JIS ⇒ なので、この文字コード指定でインポートすれば、文字化けは有り得ない。
以上、実ファイルに則して改修したアップデートを上書きアップしました。
●アップデートサンプル「csvファイル一括インポート.zip」→ http://yahoo.jp/box/AHNvLI
Offline
Hiro様
改良ありがとうございます。
本当にすごいですね。
> 一応実際のcsvファイル載せます
> https://drive.google.com/file/d/0B_Llwx … sp=sharing
> 今自分で確認したのですがexcel以外で開くと文字化けしているようでした。csvファイルの実際の中身は、csvなんかでなく、tab形式ですよ!!!
詳細は、
・タブ区切り形式 ⇒ カンマ区切りに準拠した切出し計算式を大幅改修。
・改行はWin標準のCR+LF ⇒ FMの改行はCRなので2重改行となる ⇒ LF(10)を除去してダブり改善
・文字コードはShift_JIS ⇒ なので、この文字コード指定でインポートすれば、文字化けは有り得ない。以上、実ファイルに則して改修したアップデートを上書きアップしました。
●アップデートサンプル「csvファイル一括インポート.zip」→ http://yahoo.jp/box/AHNvLI
インポートファイルなのですがshift_JISではなくUTF-8でした。
UTF-8で取り込むと文字化けしなくなりました。
ただ、文字コードが違うので正常にはインポートできなかったので今、hiro様に作っていただいたサンプルをよく理解して
変更してみようと試みているところです
Offline
Hiro様のサンプルを参考にとても素晴らしい物を作ることが出来ました。
また、インポートについても理解を深める事が出来ました
皆さま方のご回答本当にありがとうございました。
まだまだ奥が深くわからないこともたくさんあるので、またお世話になると思います。
その際はよろしくお願いします。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 621.39 KiB (Peak: 654.3 KiB) ]