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

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

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

Re[7]: フォルダ作成とファイル保存をデータから


(過去ログ 66 を表示中)

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

■38503 / inTopicNo.1)  フォルダ作成とファイル保存をデータから
  
□投稿者/ みのり (1回)-(2009/07/17(Fri) 00:44:04)

分類:[VB.NET/VB2005 以降] 

はじめまして。超初心者の、みのりといいます。

Visual Basic 2008 Express Editionをはじめたばかりです。
データをファイルに保存するところまでは、うまくいったのですが、
データ別に保存したいのですが、本や掲示板を色々見ているのですが
解決にいたっていません;;

いい方法があればアドバイスいただけないでしょうか?

今現在、データをファイルに保存する時に
file = New System.IO.StreamWriter("c:\data.txt")
としているのですが、


1.データを分けて名前を付けて保存したい
データの左から8番目〜11番目が日付けになっていまして
例:0717.txt と名前を付けて保存したい。


2.フォルダがなければ、作成
データの左から1番目〜3番目(種別A 種別B など)
データの左から4番目〜7番目(年)

c:\種別A\2009
c:\種別B\2009 とフォルダを作り

c:\種別A\2009¥0717.txt
c:\種別B\2009¥0717.txt とファイルを保存したいのですが
いい方法があればアドバイス・いただけないでしょうか?

皆様、お知恵をお貸しくださいませ(_ _)
OS は Windows XP です。

よろしくおねがいいたします。
引用返信 編集キー/
■38504 / inTopicNo.2)  Re[1]: フォルダ作成とファイル保存をデータから
□投稿者/ もりお (11回)-(2009/07/17(Fri) 01:25:08)
2009/07/17(Fri) 01:31:09 編集(投稿者)
No38503 (みのり さん) に返信
文章を拝見した限りでは、問題の切り分けは出来ているように思います。
後は、1つ1つ実装してみてくださいな。
そして、どのフェーズでうまくいかないか教えてください。

・データからファイル名となる文字列を切り出す。
・データからフォルダ名となる文字列を切り出す。
・切り出したフォルダ名でフォルダがあるか確認する。
・なければ、フォルダを作成する。
・切り出したファイル名でデータを保存する。


引用返信 編集キー/
■38505 / inTopicNo.3)  Re[1]: フォルダ作成とファイル保存をデータから
□投稿者/ .SHO (972回)-(2009/07/17(Fri) 08:31:04)
> file = New System.IO.StreamWriter("c:\data.txt")

本筋と関係ないですが、これ↑ちゃんと「c:\data.txt」作られてます?
引用返信 編集キー/
■38507 / inTopicNo.4)  Re[2]: フォルダ作成とファイル保存をデータから
□投稿者/ みのり (2回)-(2009/07/17(Fri) 09:13:10)
もりおさん .SHOさんアドバイスありがとうございます。

> ・データからファイル名となる文字列を切り出す。
> ・データからフォルダ名となる文字列を切り出す。
> ・切り出したフォルダ名でフォルダがあるか確認する。
> ・なければ、フォルダを作成する。
> ・切り出したファイル名でデータを保存する。

なるほど、すべてを一度に考えていました。
一週間ほど悩んでまして、出来ないのかな〜?と
あきらめかけていましたが、ひとつひとつに分けていただいて見ると
少し希望がでてきました^^;


> 本筋と関係ないですが、これ↑ちゃんと「c:\data.txt」作られてます?

はい。data.txtは作成しましたので大丈夫です^^
ただ、内容については全てを確認できていませんがdata.txtに書き込みは
できているようです。(自信はないですが^^;)
全てのデータが書き込みされているのかどうかの確認のために
今回の質問にいたりました。

ひとつひとつ、もう一度勉強します。
みなさまアドバイスありがとうございました。


引用返信 編集キー/
■38595 / inTopicNo.5)  Re[3]: フォルダ作成とファイル保存をデータから
□投稿者/ みのり (3回)-(2009/07/20(Mon) 11:45:11)
お世話になります。みのりです。
以前、質問させていただきました

  ・データからフォルダ名・ファイル名となる文字列を切り出す。
  ・フォルダ・ファイルがあるか確認。なければ作成。

までは、なんとか出来ました。(これだけでも感動しています^^;)

しかし、・切り出したファイル名で、データ保存がうまく行きません。
色々やってみたのですが、切り出したファイル名でファイルは作成されているのですが、
肝心のデータが書き込み出来ても、一行だけとか全く書き込み出来ていない
状態ばかりです。
  


 >> file = New System.IO.StreamWriter("c:\data.txt")

>本筋と関係ないですが、これ↑ちゃんと「c:\data.txt」作られてます? 

 .SHOさんに指摘いただいた、この辺の問題でしょうか?
どこが悪いのかアドバイスいただければ幸いです。




If Mid(buff, 1, 3) = "osk" Then

Kuiki.SetData(buff)

                    
   If System.IO.Directory.Exists("c:\" & Mid(buff, 1, 3) & "\" & _
                                  Mid(buff, 4, 4)) = True Then                         
   Else 
    System.IO.Directory.CreateDirectory("c:\" & Mid(buff, 1, 3) & "\" & _
                                   Mid(buff, 4, 4))
   End If

   If System.IO.File.Exists("c:\" & Mid(buff, 1, 3) & "\" & _
                            Mid(buff, 4, 4) & "\" & _
                            Mid(buff, 16, 6) & ".txt") = True Then 
   Else 
    file = New System.IO.StreamWriter("c:\" & Mid(buff, 1, 3) & "\" & _
                                       Mid(buff, 4, 4) & "\" & _
                                       Mid(buff, 16, 6) & ".txt", _
                                       False, System.Text.Encoding.Default)
    file.WriteLine(buff & vbCrLf)
    file.Close()
    End If
End If


後、・データからフォルダ名・ファイル名となる文字列を切り出す。
  ・フォルダ・ファイルがあるか確認。なければ作成。
の、もっと綺麗な?方法などがあれば、アドバイスいただけたら、うれしいです^^;

よろしくおねがいします。

引用返信 編集キー/
■38597 / inTopicNo.6)  Re[4]: フォルダ作成とファイル保存をデータから
□投稿者/ らじうむ (20回)-(2009/07/20(Mon) 12:34:38)
No38595 (みのり さん) に返信
> お世話になります。みのりです。
> 以前、質問させていただきました
>
>   ・データからフォルダ名・ファイル名となる文字列を切り出す。
>   ・フォルダ・ファイルがあるか確認。なければ作成。
>
> までは、なんとか出来ました。(これだけでも感動しています^^;)
>
> しかし、・切り出したファイル名で、データ保存がうまく行きません。
> 色々やってみたのですが、切り出したファイル名でファイルは作成されているのですが、
> 肝心のデータが書き込み出来ても、一行だけとか全く書き込み出来ていない
> 状態ばかりです。
>   
>
>
> >> file = New System.IO.StreamWriter("c:\data.txt")
>
> >本筋と関係ないですが、これ↑ちゃんと「c:\data.txt」作られてます?
>
> .SHOさんに指摘いただいた、この辺の問題でしょうか?
> どこが悪いのかアドバイスいただければ幸いです。
>
>
>
>
> If Mid(buff, 1, 3) = "osk" Then
>
> Kuiki.SetData(buff)
>
>
> If System.IO.Directory.Exists("c:\" & Mid(buff, 1, 3) & "\" & _
> Mid(buff, 4, 4)) = True Then
> Else
> System.IO.Directory.CreateDirectory("c:\" & Mid(buff, 1, 3) & "\" & _
> Mid(buff, 4, 4))
> End If
>
> If System.IO.File.Exists("c:\" & Mid(buff, 1, 3) & "\" & _
> Mid(buff, 4, 4) & "\" & _
> Mid(buff, 16, 6) & ".txt") = True Then
> Else
> file = New System.IO.StreamWriter("c:\" & Mid(buff, 1, 3) & "\" & _
> Mid(buff, 4, 4) & "\" & _
> Mid(buff, 16, 6) & ".txt", _
> False, System.Text.Encoding.Default)
> file.WriteLine(buff & vbCrLf)
> file.Close()
> End If
> End If
>
>
> 後、・データからフォルダ名・ファイル名となる文字列を切り出す。
>   ・フォルダ・ファイルがあるか確認。なければ作成。
> の、もっと綺麗な?方法などがあれば、アドバイスいただけたら、うれしいです^^;
>
> よろしくおねがいします。

うーん?一行だけでも出力されると言うことは処理的には間違っていないですよね。
buffの内容が想定と違っているんじゃないでしょうか?
file.WriteLineを呼び出す直前で止めてbuffの中身を確認してみるのが良いと思いますよ。

引用返信 編集キー/
■38598 / inTopicNo.7)  Re[5]: フォルダ作成とファイル保存をデータから
□投稿者/ επιστημη (2064回)-(2009/07/20(Mon) 13:06:08)
επιστημη さんの Web サイト
> データからフォルダ名・ファイル名となる文字列を切り出す。

フォルダ名/ファイル名/拡張子などなどの操作は
System.IO.Path に便利なメソッドが用意されています。

http://msdn.microsoft.com/ja-jp/library/system.io.path_members.aspx

引用返信 編集キー/
■38601 / inTopicNo.8)  Re[4]: フォルダ作成とファイル保存をデータから
□投稿者/ やじゅ (1122回)-(2009/07/20(Mon) 13:37:58)
やじゅ さんの Web サイト
No38595 (みのり さん) に返信
> 後、・データからフォルダ名・ファイル名となる文字列を切り出す。
>   ・フォルダ・ファイルがあるか確認。なければ作成。
> の、もっと綺麗な?方法などがあれば、アドバイスいただけたら、うれしいです^^;
> 

        Dim file As System.IO.StreamWriter
        Dim fileName As String
        Dim directoryName As String
        Dim buff As String

        buff = "osk1234xxxxxxxxABCDEFGaaaaa" + vbCrLf + "あいうえおかきくけこ"

        If buff.Substring(0, 3) = "osk" Then

            Kuiki.SetData(buff)

            fileName = "c:\" & buff.Substring(0, 3) & "\" & _
                               buff.Substring(3, 4) & "\" & _
                               buff.Substring(15, 6) & ".txt"
            directoryName = System.IO.Path.GetDirectoryName(fileName)

            If System.IO.Directory.Exists(directoryName) = False Then
                System.IO.Directory.CreateDirectory(directoryName)
            End If

            If System.IO.File.Exists(fileName) = False Then
                file = New System.IO.StreamWriter(fileName, False, System.Text.Encoding.Default)

                file.WriteLine(buff & vbCrLf)
                file.Close()
            End If
        End If

引用返信 編集キー/
■38604 / inTopicNo.9)  Re[4]: フォルダ作成とファイル保存をデータから
□投稿者/ もりお (13回)-(2009/07/20(Mon) 17:29:10)
No38595 (みのり さん) に返信 
> しかし、・切り出したファイル名で、データ保存がうまく行きません。
> 色々やってみたのですが、切り出したファイル名でファイルは作成されているのですが、
> 肝心のデータが書き込み出来ても、一行だけとか全く書き込み出来ていない
> 状態ばかりです。
> If System.IO.File.Exists("c:\" & Mid(buff, 1, 3) & "\" & _
>                    Mid(buff, 4, 4) & "\" & _
>                    Mid(buff, 16, 6) & ".txt") = True Then
> Else
>     File = New System.IO.StreamWriter("c:\" & Mid(buff, 1, 3) & "\" & _
>                                        Mid(buff, 4, 4) & "\" & _
>                                        Mid(buff, 16, 6) & ".txt", _
>                                        False, System.Text.Encoding.Default)
>     File.WriteLine(buff & vbCrLf)
>     File.Close()
> End If
うーん・・・的を外していたらごめんなさい。

ファイルが存在しなければ書き込みを行うようになっていますので
たとえば、データがこのような場合

osk2009hogehoge090720HogeHoge
osk2009fugafuga090720FugaFuga

HogeHogeの時点でファイルが作成され
FugaFugaは書き込まれません

引用返信 編集キー/
■38608 / inTopicNo.10)  Re[5]: フォルダ作成とファイル保存をデータから
□投稿者/ みのり (4回)-(2009/07/21(Tue) 00:30:28)
επιστημηさん やじゅさん もりおさんアドバイスありがとうございます。

Path メンバについて拝見させていただきましたが、
私の場合見方から勉強しなくちゃ駄目そうです^^;
ディレクトリを作成する目的があり、このPath メンバを見つける事ができても
きっと素通りしていますね^^;

やじゅさんに頂いたアドバイスで
GetDirectoryNameがPath メンバで、こういった使い方をするのか〜って
答えを見て、わかった気になってます^^;

正直今現在、このページの眺めているだけで理解までは至っていませんが
参考になるHPを教えていただきありがとうございます。


No38604 (もりお さん) に返信

> うーん・・・的を外していたらごめんなさい。
>
> ファイルが存在しなければ書き込みを行うようになっていますので
> たとえば、データがこのような場合
>
> osk2009hogehoge090720HogeHoge
> osk2009fugafuga090720FugaFuga

まさにこのようなデータです。
何行あるか数えていませんが、だいぶあります。

> HogeHogeの時点でファイルが作成され
> FugaFugaは書き込まれません

あっ!なるほど〜
って思ったのも、一瞬でやはりうまくいきません

      If System.IO.File.Exists(fileName) = False Then
       '↑ファイルが存在するかを確認だから関係ないですよね?

file = New System.IO.StreamWriter(fileName, False, System.Text.Encoding.Default)
        '↑ファイルを作成。ここを色々試してもやはり一行だけしか書き込めないか、真っ白の状態です。

file.WriteLine(buff & vbCrLf)
file.Close()
End If

考え方自体間違っているのでしょうか?
初歩的な質問ばかりで申し訳ありませんが、もうしばらくお付き合いいただければ幸いです。
よろしくおねがいいたします(_ _;)
引用返信 編集キー/
■38612 / inTopicNo.11)  Re[6]: フォルダ作成とファイル保存をデータから
□投稿者/ もりお (14回)-(2009/07/21(Tue) 04:35:24)
2009/07/21(Tue) 04:36:24 編集(投稿者)
No38608 (みのり さん) に返信
>       If System.IO.File.Exists(fileName) = False Then
>        '↑ファイルが存在するかを確認だから関係ないですよね?
> 
>                 file = New System.IO.StreamWriter(fileName, False, System.Text.Encoding.Default)
>         '↑ファイルを作成。ここを色々試してもやはり一行だけしか書き込めないか、真っ白の状態です。
> 
>                 file.WriteLine(buff & vbCrLf)
>                 file.Close()
>             End If

IF ブロックの中にファイルの書き込み処理を
記述されているので、ファイルが無いという条件が成立
したときにしか書き込みは行われないです。

' ファイルが無ければ以下の処理を行う
If System.IO.File.Exists(fileName) = False Then
    ' ファイルを上書きモードで開く(ファイルが存在しない場合は作成されます)
    file = New System.IO.StreamWriter(fileName, False, System.Text.Encoding.Default)
    ' ストリームに書き込む
    file.WriteLine(buff & vbCrLf)
    ' ファイルにフラッシュする
    file.Close()
End If


ファイルに追加で書き込みをする場合は
ファイルが無ければの条件文を削除して、StreamWriter の2番目の引数に
True(追加書き込みモード)を指定してくださいな。

' ファイルを追加モードで開く(ファイルが存在しない場合は作成されます)
file = New System.IO.StreamWriter(fileName, True, System.Text.Encoding.Default)
' ストリームに書き込む
file.WriteLine(buff)
' ファイルにフラッシュする
file.Close()

引用返信 編集キー/
■38621 / inTopicNo.12)  Re[7]: フォルダ作成とファイル保存をデータから
□投稿者/ みのり (5回)-(2009/07/21(Tue) 12:23:01)
No38612 (もりお さん) に返信
> 2009/07/21(Tue) 04:36:24 編集(投稿者)
> IF ブロックの中にファイルの書き込み処理を
> 記述されているので、ファイルが無いという条件が成立
> したときにしか書き込みは行われないです。
>
> ' ファイルが無ければ以下の処理を行う
> If System.IO.File.Exists(fileName) = False Then
> ' ファイルを上書きモードで開く(ファイルが存在しない場合は作成されます)
> file = New System.IO.StreamWriter(fileName, False, System.Text.Encoding.Default)
> ' ストリームに書き込む
> file.WriteLine(buff & vbCrLf)
> ' ファイルにフラッシュする
> file.Close()
> End If
>
>
> ファイルに追加で書き込みをする場合は
> ファイルが無ければの条件文を削除して、StreamWriter の2番目の引数に
> True(追加書き込みモード)を指定してくださいな。
>
> ' ファイルを追加モードで開く(ファイルが存在しない場合は作成されます)
> file = New System.IO.StreamWriter(fileName, True, System.Text.Encoding.Default)
> ' ストリームに書き込む
> file.WriteLine(buff)
> ' ファイルにフラッシュする
> file.Close()

もりおさんアドバイスありがとうございましたーー!!
的確な(答え)を教えてもらっているのに、早とちりな私はifを残したまま
Trueに変え、変わらない結果に、forなどを付け加えてみたりしちゃってました
(実は昨日質問する前にもTrueにしてみたりしていたので、なにか足りないのかな?と・・・^^;)

途中コードがめちゃくちゃになり、最初に戻るためにもりおさんのアドバイスを見返していたら、
そのままこれが答えだったのですね^^;

早い時間にアドバイス(答え)をいただき、お礼が言えるのが昼過ぎになってしまうなんて
こんな超ド素人の私に何度もお答えいただきありがとうございました。動いて感動です!

今後もよろしくおねがいいたします。




解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -