none
format関数について RRS feed

  • 質問

  • こんにちは

     

    早速ですが、ファイル名が「312」だとしたら。

     

    dim i as integer

    dim fmt as string

     

    i=パス

    fms=i.tostring("#月##日")

    で記述するとしテキストボックスで表示させると「3月12日」になるんですが、

    これが「s312」の場合。テキストボックスで表示させると「0」になってしまいます。

    ファイル名の最初の「s」も取りたいんですが、なかなかできません。

    format関数は文字列を数字にしないと書いてあったので、「s」の部分が取れないでいます;;

    最終的には「s3月12日」と言う風にしたいです。

    アドバイスお願いいたします。

    2007年6月1日 1:11

回答

  • 美流久さん、ありがとうございます。
    おかげで仰っていることが理解できたような気がします。

    's' はここでの仮の名前とのことですので、日時が出現する位置を Substring の第一引数にすれば良いです。
    たとえば、"Miruku_2007040603.jpg" というファイルがあった場合は、

    VB.NET
    Dim stYear As String = stTarget.Substring(7, 4)

     

    といった具合になります。

    Substring メソッドの使い方は、"String.Substring メソッド" で検索して頂ければ見つかると思います。
    2007年6月1日 7:12
  •  美流久 さんからの引用
    このような方法で、「s200511130915」のファイルがあったのならば「2005」「11」「13」「09」「15」と分解し、最後に「年月日時分」と合わせればいいのでしょうか?今のところそれでコード記述しております。

    文字列として扱う分にはそれで良いのではないでしょうか?

    ただ、Substring メソッドを使う前に文字数が意図した仕様を満たしているかのチェックをした方が良いと思いますし、日付として厳密に扱うならば、分解したそれぞれの文字列を、DateTime.TryParse メソッドで検証しておくべきかもしれません。

    まあ、仕様にあった良い検証と実装がしてあれば、良いのではないでしょうか?

    そのあたりで、不安が残るようであればプロジェクトのメンバと相談してください。
    周りともうまく意思疎通ができるチャンスだと思いますよ。私も昔は良くやってました。
    2007年6月1日 10:15

すべての返信

  • ファイル名がどのように決められているのかという仕様によって、プログラムでどう処理を実装するかが変わってきます。一般的にはregexなどを用いて仕様通りのファイル名であるかをチェックし、問題なければそこからファイル名を元に処理を進めます。

    上に書かれた処理についてはいくつか疑問があります。112は11月2日のつもりなのに1月12日になるんじゃなかろうか?とか、s以外にアルファベットが2文字以上になることはないだろうか?などです。

    繰り返しになりますが、まずはファイル名がどう付けられるのかの仕様を確認してみて下さい。

    2007年6月1日 2:02
    モデレータ
  •  trapemiya さんからの引用

    ファイル名がどのように決められているのかという仕様によって、プログラムでどう処理を実装するかが変わってきます。一般的にはregexなどを用いて仕様通りのファイル名であるかをチェックし、問題なければそこからファイル名を元に処理を進めます。

    上に書かれた処理についてはいくつか疑問があります。112は11月2日のつもりなのに1月12日になるんじゃなかろうか?とか、s以外にアルファベットが2文字以上になることはないだろうか?などです。

    繰り返しになりますが、まずはファイル名がどう付けられるのかの仕様を確認してみて下さい。

    trapemiyaさんこんにちは

    回答ありがとうございます。

     trapemiya さんからの引用

    ファイル名がどう付けられるのかの仕様を確認してみて下さい。

    どうやって確認できるのですか?

     

    「2」のフォルダがあり、その中に「s2007011203」とあります。

    年月日時となっています。

     

    2007年6月1日 3:12
  •  美流久 さんからの引用

    どうやって確認できるのですか?

    それは美流久さんでないとわかりません。
     
     美流久 さんからの引用

    「2」のフォルダがあり、その中に「s2007011203」とあります。

    年月日時となっています。


    ファイル名が固定長であり、その仕様がわかっているのであれば、それに従って分解して取り出せば良いだけです。
    つまり、何桁目から何桁目までが年で、何桁目から何桁目までが月で、何桁目から何桁目までが日でとわかっているのであれば、それをSubstringメソッドなどで取り出すことができるわけです。

    2007年6月1日 4:12
    モデレータ
  • 美流久さん、こんにちは。

     美流久 さんからの引用
    「2」のフォルダがあり、その中に「s2007011203」とあります。
    年月日時となっています。 

    ??? 最初の質問と仕様が変わっていませんか?

     美流久 さんからの引用
    これが「s312」の場合。テキストボックスで表示させると「0」になってしまいます。

    とご自身が書いているように、最初の質問は 0 パディングしていない形式でした。
    これに関しては、trapemiya さんが 0 を省略すると月と日の境目が曖昧になるという指摘をなさっています。

    trapemiya さんがご指摘した内容を理解した上でのご返答だったのでしょうか?
    この部分の理解がないままに "回答ありがとうございます。" と書いて、
    別の仕様を唐突に持ってきているので、話の流れがわからなかったです。

     美流久 さんからの引用
    どうやって確認できるのですか?

    これもすでに返答がありますが、一応補足します。

    美流久さんが持っている仕事の "仕様" ですから、trapemiya さんに聞いてもわからないということです。
    これは、美流久さん自身が仕様を確認してくださいという意味ですよね。

    返答内容の対話が gdgd に見えてしまったので、口うるさいことを書いてしまいましたが、とりあえず閑話休題。

     美流久 さんからの引用
    「2」のフォルダがあり、その中に「s2007011203」とあります。
    年月日時となっています。 

    最後の 03 は 時間 (Hour) でしょうか?

    VB.NET
    Dim stTarget As String = "s2007011203"
    Dim stYear   As String = stTarget.Substring(1, 4)
    Dim stMonth  As String = stTarget.Substring(5, 2)
    Dim stDay    As String = stTarget.Substring(7, 2)

     


    最初の s がよくわからないのと、Hour だけ中途半端についているのが良くわかりませんが、
    これで、年月日の分割はできるのではないでしょうか?
    2007年6月1日 5:35
  • じゃんぬねっとさん こんにちは

     じゃんぬねっと さんからの引用

    最初の質問と仕様が変わっていませんか?

    すみません。タイトル自体不適切でしたね。すみませんでした。。

    仕様・・・いいわすれましたが、そうゆうファイルがあったとしますと言うことです。

    パスでそのファイルを出し、ファイル名に「年月日などをつけた」ものをテキストボックスに表示したいということです。

     じゃんぬねっと さんからの引用

    これに関しては、trapemiya さんが 0 を省略すると月と日の境目が曖昧になるという指摘をなさっています。

    そういうことですか!確かにそうですよね。言われて気づきましたorz

     じゃんぬねっと さんからの引用

    trapemiya さんがご指摘した内容を理解した上でのご返答だったのでしょうか?
    この部分の理解がないままに "回答ありがとうございます。" と書いて、
    別の仕様を唐突に持ってきているので、話の流れがわからなかったです。

    はい。ちゃんとわかっていませんでした。なぜ「0」なんだろうと思っていました。

    どうもすみませんです"回答ありがとうございます。"は、質問の返信をいただいてありがとうございますと言う意味で言っていました。仕様自体は最初の質問と一緒です。書き方は変わってしまいましたが。。。言葉足らずですみません

     じゃんぬねっと さんからの引用

     

    最後の 03 は 時間 (Hour) でしょうか?

    そうです。

     じゃんぬねっと さんからの引用

    最初の s がよくわからないのと

    そういうファイル名なんです。

    実際のファイル名はsではありません。trapemiyaさんに言い忘れたのですが、2文字以上ではありません。1文字だけです。

    変更はダメなので、最終的には「s20051101」というファイルがあれば「s2005年11月01日」と言う感じにしたいのです。

    先程のサンプルを参考にやってみてみます。

     

    あと、ファイル名は全て拡張子で「.jpg」がついています。

    でもそれは、System.IO.Path.GetFileNameWithoutExtensionで拡張子無い状態になっています。

    2007年6月1日 6:56
  • 美流久さん、ありがとうございます。
    おかげで仰っていることが理解できたような気がします。

    's' はここでの仮の名前とのことですので、日時が出現する位置を Substring の第一引数にすれば良いです。
    たとえば、"Miruku_2007040603.jpg" というファイルがあった場合は、

    VB.NET
    Dim stYear As String = stTarget.Substring(7, 4)

     

    といった具合になります。

    Substring メソッドの使い方は、"String.Substring メソッド" で検索して頂ければ見つかると思います。
    2007年6月1日 7:12
  • じゃんぬねっとさん

    おかげ様で分解(「s」)出来ました。

    ありがとうございます。

     じゃんぬねっと さんからの引用


    VB.NET
    Dim stYear As String = stTarget.Substring(7, 4)

     


    を参考にし、

     Dim str As String = パス
            Dim str_top As String = パス.Substring(0, 1)

    このような方法で、「s200511130915」のファイルがあったのならば「2005」「11」「13」「09」「15」と分解し、

    最後に「年月日時分」と合わせればいいのでしょうか?今のところそれでコード記述しております。

     

    2007年6月1日 9:54
  •  美流久 さんからの引用
    このような方法で、「s200511130915」のファイルがあったのならば「2005」「11」「13」「09」「15」と分解し、最後に「年月日時分」と合わせればいいのでしょうか?今のところそれでコード記述しております。

    文字列として扱う分にはそれで良いのではないでしょうか?

    ただ、Substring メソッドを使う前に文字数が意図した仕様を満たしているかのチェックをした方が良いと思いますし、日付として厳密に扱うならば、分解したそれぞれの文字列を、DateTime.TryParse メソッドで検証しておくべきかもしれません。

    まあ、仕様にあった良い検証と実装がしてあれば、良いのではないでしょうか?

    そのあたりで、不安が残るようであればプロジェクトのメンバと相談してください。
    周りともうまく意思疎通ができるチャンスだと思いますよ。私も昔は良くやってました。
    2007年6月1日 10:15
  • こんにちは☆

    format出来ました☆

     じゃんぬねっと さんからの引用

    文字列として扱う分にはそれで良いのではないでしょうか?
    ただ、Substring メソッドを使う前に文字数が意図した仕様を満たしているかのチェックをした方が良いと思いますし、日付として厳密に扱うならば、分解したそれぞれの文字列を、DateTime.TryParse メソッドで検証しておくべきかもしれません。
    まあ、仕様にあった良い検証と実装がしてあれば、良いのではないでしょうか?
    そのあたりで、不安が残るようであればプロジェクトのメンバと相談してください。
    周りともうまく意思疎通ができるチャンスだと思いますよ。私も昔は良くやってました。

    はい、アドバイスありがとうございます☆

    色々試しながら出来ました。

    アドバイスをいただき本当にありがとうございます。

    format(分解1+"年"+分解2+"時")と言う感じで記述し、表示出来るようになりました。

     

    2007年6月4日 4:16