|
textblockの入れたuwsファイルをSPLITで配列に入れて、forinでfopen、fgetを利用しuwsファイルのデータを読込、新規textファイルに指定したパスに作成をしたいのですがうまくいきません。下記のようなエラーがでます。
can't be written in 中断しますか?になります。
textblock name C:\Users\aruke\Desktop\UWS\テキスト1.uws C:\Users\aruke\Desktop\UWS\テキスト2.uws C:\Users\aruke\Desktop\UWS\検索\テキスト3.uws endtextblock
testa=SPLIT( name,"<#CR>")
for i in testa yomi=fopen(i, F_READ) yomi1=fget(yomi,F_ALLTEXT) fclose(yomi)
sinki=fopen(, F_write) fput(sinki, yomi1)
fclose(sinki) next
|
No.3276 2016/12/12(Mon) 11:19:07
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / 俄プログラマー |
|
|
新規ファイルをどの場所に何の名前で保存するのかな? それが答えです。
|
No.3277 2016/12/12(Mon) 11:49:22
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / miles |
|
|
> うまくいきません。下記のようなエラーがでます。 > can't be written in 中断しますか?になります。
1)エラーを見て、うまくいかないところを捜します。 2)「書き込みできません」ということで、ファイル書き込みの所を見ます。
|
No.3278 2016/12/12(Mon) 12:04:28
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / stuncloud |
|
|
> sinki=fopen(, F_write) 他の方も言われてますがパス指定してなきゃ書き込めませんよね あと、やりたいことはつまりファイルのコピーですよね doscmdでcopyすればいいのでは? > textファイルで作成したい なのでそのときに拡張子を.txtにしてやれば良い
|
No.3279 2016/12/12(Mon) 12:20:29
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
俄プログラマー様、返信ありがとうございます。 下記のコードで試してみましたが、指定したパスにファイルの作成はできましたが、tes1=fget(tes, F_ALLTEXT)で取得したデータが新規作成したファイルに反映されません。どこが間違っているのでしょうか?
textblock name C:\Users\aruke\Desktop\UWS\テキスト1 C:\Users\aruke\Desktop\UWS\テキスト2 C:\Users\aruke\Desktop\UWS\検索\テキスト3 endtextblock
textblock name1 テキスト1.uws テキスト2.uws テキスト3.uws endtextblock
test3 = "" test4 = "C:\Users\aruke\Dropbox\" //パスをしっかり確認する事
testa=SPLIT( name,"<#CR>") testa1=SPLIT( name1,"<#CR>")
for i in testa if i = "" gettime() i="無題"+g_time_yy4+g_time_mm2+g_time_dd2+g_time_hh2+g_time_nn2+g_time_ss2 else i=replace( i, " ", "_" ) i=replace( i, "|", "_" ) i=replace( i, "/", "_" ) endif
for y = 0 to length(testa1)-1 FNAME=test3+test4+testa1[y]+".txt" //test4の"/.txt"は使わない
DOSCMD("echo %DATE% %TIME% > " + FNAME) //ファイルをオープン
tes=fopen(FNAME, F_READ) tes1=fget(tes, F_ALLTEXT) FCLOSE(tes) ID = FOPEN(,F_READ or F_WRITE) fput(ID, tes1) FCLOSE(ID)
next next
|
No.3280 2016/12/12(Mon) 14:29:39
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
miles様、返信ありがとうございます。
パスの指定は無事できましたが、tes1=fget(tes, F_ALLTEXT)のデータが新規作成ファイルに反映されません。
|
No.3281 2016/12/12(Mon) 14:34:09
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
stuncloud様、返信ありがとうございます。 doscmdでcopyで調べてみます。
|
No.3282 2016/12/12(Mon) 14:52:02
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
上記のコードの一つの部分を修正です。
[修正前の分] textblock name C:\Users\aruke\Desktop\UWS\テキスト1 C:\Users\aruke\Desktop\UWS\テキスト2 C:\Users\aruke\Desktop\UWS\検索\テキスト3 endtextblock
[修正後の分] textblock name C:\Users\aruke\Desktop\UWS\テキスト1.uws C:\Users\aruke\Desktop\UWS\テキスト2.uws C:\Users\aruke\Desktop\UWS\検索\テキスト3.uws endtextblock
|
No.3283 2016/12/12(Mon) 15:03:12
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / 俄プログラマー |
|
|
吹き出しでもプリントでも見える形で確認することをお勧めします。 データはしっかり呼び出せているのか等の確認ができますよ。 原因を探る技術を付けましょう。
|
No.3284 2016/12/12(Mon) 15:06:24
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
stuncloud様、DOSCMDで試してみましたが、下記のエラーが出ます。 式がおかしいor型が合っていない DOSCMD("copy" i test4)
[コード] textblock name C:\Users\aruke\Desktop\UWS\テキスト1.uws C:\Users\aruke\Desktop\UWS\テキスト2.uws C:\Users\aruke\Desktop\UWS\検索\テキスト3.uws endtextblock
test4 = "C:\Users\aruke\Dropbox\" //パスをしっかり確認する事
//戻値 = DOSCMD( コマンド, [同期フラグ, 画面表示] ) testa=SPLIT( name,"<#CR>")
for i in testa DOSCMD("copy" i test4) next
|
No.3285 2016/12/12(Mon) 15:21:00
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / mocco |
|
|
バックアップ目的でファイルコピーしてくれるようなフリーソフトあります 私はそれを使っています。便利です。
|
No.3287 2016/12/12(Mon) 15:51:20
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / stuncloud |
|
|
> 式がおかしいor型が合っていない > DOSCMD("copy" i test4) エラー内容の通りです、式が正しくありません ヒント:文字列の連結は + を使う
質問される前にもう少しエラー文が何を言わんとしてるか考えてみましょう UWSCのエラー文は簡素で情報が不十分な面はありますが、とは言え的はずれなことが書かれているわけではありません これは俄プログラマーさんのおっしゃっている > 原因を探る技術を付けましょう。 にもつながります プログラムを書く上でとても大切なことです
|
No.3288 2016/12/12(Mon) 16:39:50
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / miles |
|
|
> tes1=fget(tes, F_ALLTEXT)のデータが新規作成ファイルに反映されません。 > ID = FOPEN(,F_READ or F_WRITE) 新規作成ファイル名がないのでファイルオープンエラーですよ。 (確かに、F_READ or F_WRITEのとき、なぜか戻値がエラーにならず、ファイルIDが返ってきますが...)
|
No.3290 2016/12/12(Mon) 17:31:49
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / しろまさ |
|
|
milesさん、それは昔Linersさんが紹介してたNULL書込の動作ですよ。 メモリ上でオープンして読み書きできるんですよね。(と関係ない横槍を入れる奴^^)
ID = FOPEN(,F_READ or F_WRITE) fput(ID, 123) fput(ID, 234) msgbox(fget(ID, 2)) FCLOSE(ID)
|
No.3291 2016/12/12(Mon) 18:25:09
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / miles |
|
|
しろまささん、ご指摘ありがとうございます。 知りませんでした。 勉強になります。(横槍、縦槍、OKですよ!レスの中では) 省略なしで ID = FOPEN(NULL,F_READ or F_WRITE) ということですね。
タカハシさん、ファイルオープンエラーではなく、 ファイル名がないので前記の通り、NULL書込になります。(さりげなく訂正)
ID = FOPEN(新規ファイル名,F_READ or F_WRITE) でファイルオープンしてから fput(ID, tes1) で書き込んでください。
|
No.3292 2016/12/13(Tue) 09:00:16
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
俄プログラマー様、返信ありがとうございます。 原因を探る技術を身につけるようにします。
|
No.3299 2016/12/13(Tue) 22:23:38
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
stuncloud様、返信ありがとうございます。 文字列の連結は +でやってみましたがコピーできませんでした。 下記のコードでやってみました。
test4 = "C:\Users\aruke\Dropbox\新しいテキストドキュメント.txt" //パスをしっかり確認する事
//戻値 = DOSCMD( コマンド, [同期フラグ, 画面表示] ) testa=SPLIT( name,"<#CR>")
for i in testa DOSCMD("copy"+ i + test4) next
|
No.3300 2016/12/13(Tue) 22:31:19
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
miles様、返信ありがとうございます。配列やfor文がからんでくるとなかなか難しいですね。
|
No.3301 2016/12/13(Tue) 22:34:29
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / 俄プログラマー |
|
|
printを使って確認されましたか? 思い通りの動作になっているか目で確かめられますよ また目的の動作を全て作って考えると間違っている箇所が解りづらいです。 最小単位で動作テストを繰り返すと良いです。 以下確認の例です。明らかに動作がおかしいのが目で確認する事ができます。 先のプログラムの一部を下記のように変更してみてください。printの部分を追加するだけです。
DOSCMD("echo %DATE% %TIME% > " + FNAME) //ファイルをオープン
tes=fopen(FNAME, F_READ) tes1=fget(tes, F_ALLTEXT)
//printを使い確認 print "----------------------------------------------------------" print "i="+i print "y="+y print "tes1="+tes1 print FNAME print "----------------------------------------------------------" print ""
FCLOSE(tes) ID = FOPEN(,F_READ or F_WRITE) fput(ID, tes1) FCLOSE(ID)
|
No.3303 2016/12/14(Wed) 03:33:00
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / stuncloud |
|
|
> 文字列の連結は +でやってみましたがコピーできませんでした。 > DOSCMD("copy"+ i + test4)
俄プログラマーさんも書かれてますがね、一旦DOSCMDをやる前に print "copy"+ i + test4 としてみれば何が悪いかは一目瞭然ですよ…?
ここまでくるとすごいな… 自分で原因を追求する気はないのかしら
で、ですね きっとあとでまた聞かれるだろうから先に答えておきますね ファイルパスに半角スペースが含まれる場合にDOSCMDが成功しないんですよ そういうときはパスを "<#DBL>" で括る必要がありますからね だからパスが入る変数である i と test4 は
"<#DBL>" + i + "<#DBL>" "<#DBL>" + test4 + "<#DBL>"
としてやるのが安全です ちなみにこれはUWSCがどうこうという話ではないのでここで聞かれても困る系の質問に該当します
以下蛇足
僕がDOSCMDを使うときの半スペ忘れ防止対策を書いときますね dim cmd[] = command, arg1, arg2 doscmd(join(cmd)) コマンドとそれに渡す値を順番に配列に突っ込んどいて半スペでjoinして実行します いちいち + " " + なんて書く煩わしさからも開放されるので楽でいいですよ
|
No.3304 2016/12/14(Wed) 12:00:43
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
俄プログラマー様、何度も回答頂きありがとうございます。 print分で一度一つ一つ確認していきます。 もう少し自分で考えてから質問するようにします。 反省しています。
|
No.3305 2016/12/14(Wed) 12:35:55
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / タカハシ |
|
|
stuncloud様、何度も回答頂き感謝しています。 これからは、printでしっかり確認してから質問するようにします。 <#DBL>で括るのは、知らなかったです。 自分のダメさ加減を反省しています。
|
No.3306 2016/12/14(Wed) 12:41:43
|
|
☆ Re: uwsファイルを指定の場所にtextファイルで作成したい / 俄プログラマー |
|
|
処理が速い場合は途中にメッセージボックスを入れたり、 GETKEYSTATEでキーが押されるまで中断させたりするとより確認が容易になります。
//GETKEYSTATEを使った中断の例 fukidasi("PrintScreenキーで再開") repeat sleep(1) until GETKEYSTATE(VK_SNAPSHOT)
「実行してみて動かない!→聞いてみよう!」ではなく 動かない!→どこが悪いか探る or 過去ログ検索 or ネットで検索→それでも解決しない場合聞いてみる デバッグの力も身に付いて良い経験になると思います。
|
No.3308 2016/12/14(Wed) 19:10:42
|
|