C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: フォルダの作成とファイルの移動


(過去ログ 94 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■56346 / inTopicNo.1)  フォルダの作成とファイルの移動
  
□投稿者/ neika (1回)-(2011/01/11(Tue) 14:58:51)

分類:[.NET 全般] 

VB全くの初心者です。

YYYYMMDD9999999+_p.csv の名前のファイルがあります。

YYYMMDDHHMMSSYYYYMMDD9999999というファイル名の前に作成日時を付加したフォルダを作成し、
そのフォルダ内に移動させたい。
また、その後、作成したフォルダ内に
YYYYMMDD9999999+_k.csv(0バイト) 
YYYYMMDD9999999+_ng_im.csv(0バイト)
YYYYMMDD9999999+_ng_it.csv(0バイト)
のファイルを自動的に作成したい。(必ず計4つのファイルが1つのフォルダに存在するように)

VB6.0 で作成したいと思います。
よろしくお願いいたします。
引用返信 編集キー/
■56348 / inTopicNo.2)  Re[1]: フォルダの作成とファイルの移動
□投稿者/ 魔界の仮面弁士 (2016回)-(2011/01/11(Tue) 15:49:29)
No56346 (neika さん) に返信

掲示板の利用規約には、
 『半角カナは使用しないでください。文字化けの原因になります。』
と書かれていますよ。

また、投稿時の分類に [.NET 全般] が選択されていますが、
VB6 をお使いなのですから、[VB6 以前]を選択すべきだったかと。


> VB6.0 で作成したいと思います。
ここの掲示板トップにある、[C# と VB.NET 入門]のリンク先の
「Visual Basic 6.0 (VB6)」サンプルが参考になるかと。


> YYYYMMDD9999999+_p.csv の名前のファイルがあります。
9999999 は固定値ですか? それとも連番か何か?


> YYYMMDDHHMMSSYYYYMMDD9999999というファイル名の前に
YYYYMMDD が 2 回ですか?


> フォルダを作成し、
MkDir ステートメント、もしくは CreateFolder メソッドを使います。
http://jeanne.wankuma.com/tips/vb6/directory/create.html
(上記 URL ではMkDir 関数と書かれていますが、実際にはステートメントです)
http://homepage1.nifty.com/rucio/main/Samples/vbsample001.htm


> そのフォルダ内に移動させたい。
移動には Name ステートメントを使います。
もしくは、MoveFolder / MoveFile メソッドでも OK です。
http://jeanne.wankuma.com/tips/vb6/file/move.html
http://jeanne.wankuma.com/tips/vb6/directory/move.html


> また、その後、作成したフォルダ内に
> YYYYMMDD9999999+_k.csv(0ハ゛イト) 
> YYYYMMDD9999999+_ng_im.csv(0ハ゛イト)
> YYYYMMDD9999999+_ng_it.csv(0ハ゛イト)
> のファイルを自動的に作成したい。(必ず計4つのファイルが1つのフォルダに存在するように)
空のファイルは、Open ステートメントで For Output を指定すれば作成できます。
もしくは CreateTextFile メソッドで、第二引数(上書き指定)に True を指定すれば OK です。


また、現在の年月日等を含んだ文字列を作りたい場合は、
 s = Format(Now, "yyyyMMdd")
 s = Format(Now, "yyyyMMddHHNNSS")
などのように書けますし、既存の文字列を切り出したいなら Mid 関数を使う事ができます。
http://jeanne.wankuma.com/tips/vb6/string/substring.html
http://homepage1.nifty.com/rucio/main/Samples/vbsample021.htm
引用返信 編集キー/
■56356 / inTopicNo.3)  Re[2]: フォルダの作成とファイルの移動
□投稿者/ neika (2回)-(2011/01/11(Tue) 17:39:47)
No56348 (魔界の仮面弁士 さん) に返信
> ■No56346 (neika さん) に返信
>


魔界の仮面弁士さん、早速の回答ありがとうございました。

ファイルの移動、フォルダの作成は既存のVB(何かで使用していましたVB)を編集していけました。

>>YYYYMMDD9999999+_p.csv の名前のファイルがあります。
> 9999999 は固定値ですか? それとも連番か何か?

YYYYMMDD9999999は固定値です。

>>YYYYMMDD9999999+_k.csv(0ハ゛イト) 
>>YYYYMMDD9999999+_ng_im.csv(0ハ゛イト)
>>YYYYMMDD9999999+_ng_it.csv(0ハ゛イト)
>>のファイルを自動的に作成したい。(必ず計4つのファイルが1つのフォルダに存在するように)
> 空のファイルは、Open ステートメントで For Output を指定すれば作成できます。
> もしくは CreateTextFile メソッドで、第二引数(上書き指定)に True を指定すれば OK です。

何かサンプル的なものがあれば教えてください。

ちなみに既存のVBです。できましたら下記のVBで一括でできると幸いです。
わがままいいますが、よろしくお願いいたします。

Dim FPath1, FPath2, FName
Application.ScreenUpdating = False
FPath1 = Range("A1").Value & "\"
FName = Dir$(FPath1 & "*.*")
Do While FName <> ""
Select Case InStr(FName, "_")
Case Is > 0
FPath2 = Format(Now, "yyyyMMddHHNNSS") + Left(FName, 15)
Case Else
FPath2 = Format(Now, "yyyyMMddHHNNSS") + Left(FName, 15)
End Select
On Error Resume Next
MkDir$ FPath1 & FPath2
On Error GoTo 0
FileCopy FPath1 & FName, FPath1 & FPath2 & "\" & FName
Kill FPath1 & FName
FName = Dir$
Loop
Application.ScreenUpdating = True
引用返信 編集キー/
■56357 / inTopicNo.4)  Re[3]: フォルダの作成とファイルの移動
□投稿者/ 魔界の仮面弁士 (2019回)-(2011/01/11(Tue) 18:14:46)
ですから、半角カナは禁止なんですってば。(^_^;)

No56356 (neika さん) に返信
> ファイルの移動、フォルダの作成は既存のVB(何かで使用していましたVB)を編集していけました。
提示されたコードを見る限り、これは VB6 ではなく、Excel VBA のようですね。
VBA のまま実装したいのでしょうか。それとも VB6 に移植したいのでしょうか?

> 何かサンフ゜ル的なものがあれば教えてください。
提示されたキーワードをヘルプファイル(ランゲージ リファレンス)で調べると、
使用例が掲載されていますので、それを手掛かりにしてみてください。

それでも分からないようであれば、ヘルプ記載の内容のどの部分が分からないのかを
書いてもらえれば、その部分について解説しますよ。


> ちなみに既存のVBです。できましたら
できると思いますよ。頑張ってみてください。

提示された既存コードでは FileSystemObject が用いられておらず、
従来のファイル入出力ステートメントおよび関数によるファイル処理が
行われているようなので、それに準じた実装にした方が統一性がとれそうですね。


> よろしくお願いいたします。
折角なので、既存の Excel VBA コードにもツッコミを入れておきます。

> Dim FPath1, FPath2, FName
Dim FPath1 As String, FPath2 As String, FName As String
のように、それぞれに型を明示した方が良いでしょう。

> FPath1 = Range("A1").Value & "\"
できれば、パスの末尾が "\" であるかどうかを検証した方が良いかと思います。
たとえばルートディレクトリの場合、既に "\" が付いているのが普通ですし("C:\" のように)。

> FName = Dir$(FPath1 & "*.*")
第2引数を省略した場合には、不可視属性やシステム属性のついたファイルは列挙されないので、
その点、注意が必要です。


> Select Case InStr(FName, "_")
> Case Is > 0
> FPath2 = Format(Now, "yyyyMMddHHNNSS") + Left(FName, 15)
> Case Else
> FPath2 = Format(Now, "yyyyMMddHHNNSS") + Left(FName, 15)
> End Select
Case ブロックと Else ブロックの内容がまったく同一なので、
これでは判定文の意味がありません。Select Case 〜 End Select まで、
 FPath2 = Format(Now, "yyyyMMddHHNNSS") & Left(FName, 15)
というコードと同じ意味になってしまっていますよ。

なお、文字列連結には(+ 演算子ではなく) & 演算子を使う事が推奨されています。


> MkDir$ FPath1 & FPath2
「MkDir ステートメント」が「MkDir$ ステートメント」になってしまっていますよ。
一応、$ や # や % を付けてもコンパイルは通ってしまいますが、そのような記法は本来誤りです。
引用返信 編集キー/
■56369 / inTopicNo.5)  Re[4]: フォルダの作成とファイルの移動
□投稿者/ shu (354回)-(2011/01/12(Wed) 07:53:44)
No56357 (魔界の仮面弁士 さん) に返信
> ですから、半角カナは禁止なんですってば。(^_^;)
>
もしかしたら半角カナが分からないのかも。
≫neikaさん、『バイト』『サンプル』が細い字で打たれてますがそのことですよ。 
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -