- PR -

お手本になるようなソースコード

投稿者投稿内容
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2007-05-23 10:47
コード:
    /**
     * 指定ファイルの妥当性チェック
     * 
     * @param fPath ファイルパス
     * @return 存在するファイルならtrue、それ以外はfalseを返す。
     * 
     */
    public static boolean chkFile(String fPath) {
        File file = new File(fPath);
        /* ファイルある? */
        if(!file.exists()){
            System.out.println("["+fPath+"]ファイルがありません。");
            return false;
        }
        
        /* それファイル? */
        if(!file.isFile()){
            System.out.println("["+fPath+"]はファイルではありません。");
            return false;
        }
        return true;
    }


ファイルの妥当性をチェックするメソッドがコンソールへの出力もおこなうというのは良くないコードだと思います。再利用しにくい。

コード:
        boolean flg = false;


フラグ変数に flg って付けますか・・・。なんのフラグですか?
マーサ
ベテラン
会議室デビュー日: 2004/11/26
投稿数: 87
投稿日時: 2007-05-23 12:11
引用:

未記入さんの書き込み (2007-05-23 10:47) より:


を、やっと突っ込み来たw
有難う御座いますm(_ _)m

お手本としては全然駄目ですねw

他にも突っ込み所満載だと思ってたんだけど。
もう皆飽きた(暇が無い)のかなぁ。。。
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2007-05-23 16:20
コード:
    /* タブ文字 */
    static String STR_RETERN = "\\r\\n";


RETURN ?

#しょうもない突っ込みで申し訳ない
_________________
# Future Is On Fire !
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2007-05-23 18:28
間違ったままではちょっと恥ずかしいので、
しつこいですが訂正版です。
なんとなく逆変換もできるようにしてみました。

コード:
// 変換関数を生成するファクトリー関数。
function createConverter(oldDelim, newDelim) {
  // カラム分離用パターン
  //   グループ1⇒ 空文字列 or 非quoted文字列 or quoted文字列
  //   グループ2⇒ 変換前区切り文字 or 改行 or 文字列の終端
  //     非quoted文字列⇒ CR, LF, 変換前区切り文字, " を含まない1文字 +
  //                      CR, LF, 変換前区切り文字を含まない文字を0文字以上
  //     quoted文字列⇒ " + ( "" or " 以外の1文字 ) を0回以上 + "
  var reg = new RegExp('(|[^"\\r\\n'+oldDelim+'][^\\r\\n'
          + oldDelim+']*|(?:"(?:""|[^"])*"))('+oldDelim+'|\\r?\\n|$)', 'g');
  // quote要否判定パターン
  var quotePtn = new RegExp('[' + newDelim + '\r\n]');

  // ローカル関数
  function quote(val) {
    return val.match(quotePtn) ? ('"' + val.replace(/"/g, '""') + '"') : val; // '
  }
  function unquote(val) {
    return (val.indexOf('"') == 0)? 
              val.substring(1, val.length-1).replace(/""/, '"') : val;
  }
  // 変換関数を返す
  return function (csv) {
    return csv.replace(reg, function(g0, g1, g2) {
      return quote(unquote(g1)) + g2.replace(oldDelim, newDelim);
    });
  }
}

// csv→tsv変換関数
var csv2tsv = createConverter(",", "\t");
// tsv→csv変換関数
var tsv2csv = createConverter("\t", ",");

alert(csv2tsv('a,"b,c"\r\n"d""e",,\t,g'));

Anonymous Coward
会議室デビュー日: 2007/05/09
投稿数: 8
投稿日時: 2007-05-24 01:05
引用:

びしばしさんの書き込み (2007-05-21 12:21) より:
...とこういうことを書く私ぐらいじゃないですか ? 「敷居が高い」人って。
引用:

お題が高度化してしまったために敷居が高くなってしまっている雰囲気もありますし、


お手本になるソースコードなら、コメントも正しい言葉を使いたいと思いませんか ?


ご指摘ありがとうございます。誤用しておりました。
検索してみましたところ、同様の誤用をしている日本人は多いようです。
正に下記リンクの誤用の方の意味で使っておりました。
http://piza.2ch.net/log2/book/kako/943/943165088.html
気をつけたいと思います。

引用:

じゃんぬねっとさんの書き込み (2007-05-21 14:06) より:
.NET ならば、TextFieldParser クラスで読み取って書き出しで良いと思いますが、
お題からすると、入出力を自前で書けということになると思います。


こんな便利なクラスがあったのですね。知りませんでした(汗)。

引用:

びしばしさんの書き込み (2007-05-21 12:21) より:
「みんなでこの車輪を再発明するならどう書きます ?」という意図でしょうか。


私がこのスレを立てたそもそもの目的は、以下のようなものでした。
・初心者教育向けの簡単なお題にある程度経験を積んだ人間が自分なりの理想解を書いてみることで、
 息抜き/頭の体操となる。また、自分が初心者だった頃には気づかなかった再発見があったりする。
・他の熟練者の方が書いたよりスマートな理想解を見ることで、自分もまだまだだなと再認識しつつ、
 勉強になる。

これに加えて、最初のお題の流れから、以下のような楽しみも増えました。
・誰かがお題をバージョンアップさせることで、予想外にお題が高度化し、
 結果的に出題者が予想だにしなかった高度なコードが生まれる。

CSVの変換は、初心者教育向けのあまり難しすぎないお題として、
とはいえ最初のお題に参加してくださった方々は非常にレベルの高い方が多かったため、
あまり簡単すぎもしないように、丁度良いものをと、私なりに考えたつもりだったのですが、
私の頭脳ではどうしても完全に新規性のあるものは思いつかず、
車輪の再発明的ものになってしまうのは避けられませんでした。

引用:

じゃんぬねっとさんの書き込み (2007-05-21 14:06) より:
ただ仮にそうであったとして、"お手本になるコード" となると高パフォーマンスなコードを書くべきなのか、
それとも汎用的なクラスを書いて実装していくべきなのか、どちらなのかという疑問はありますね。


これは個々の解釈に任せて複数の解がでてくるのがおもしろいと思っておりました。
こういう点を重視するとこういう方法が理想、逆にこういう点を重視するとこういう方法が理想、
バランスの丁度いいところをとると最終的な理想としてはこういう方法になるのではないか、
という流れになるとおもしろいかな、と思ったのです。

引用:

マーサさんの書き込み (2007-05-23 12:11) より:
他にも突っ込み所満載だと思ってたんだけど。
もう皆飽きた(暇が無い)のかなぁ。。。


では、恐縮ながら私からも(笑)。
実際にコンパイルして動かしてみましたところ、以下の2点が抜けているようです。
・データがカンマしか含んでいなかった場合、両端のクォート文字を外す。
・データがタブ文字を含んでいた場合、両端にクォート文字を付加する。

sawatさんのコードも同様の抜けがありましたが、既に自ら気づかれて修正済みですね。
実は私も正規表現をうまく使えないかと、漠然と考えてはいたのですが、先を越されてしまいました。

ところで、JavaScriptはあまり詳しくないのですが、随分おもしろいコードが書けるんですね。
可読性の面ではやや難がありそうですが(苦笑)。
もし端折った部分のファイルの入出力を実装するとしたら、
FileSystemObjectというのを使うことになるのでしょうか?
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2007-05-24 09:44
引用:

Anonymous Cowardさんの書き込み (2007-05-24 01:05) より:
sawatさんのコードも同様の抜けがありましたが、既に自ら気づかれて修正済みですね。


はい。見落としていました。
最初は「クォートされていないカンマをタブに置換するだけ?」と思ってしまいました
引用:

ところで、JavaScriptはあまり詳しくないのですが、随分おもしろいコードが書けるんですね。
可読性の面ではやや難がありそうですが(苦笑)。


JavaScriptはクロージャ高階関数が使えるのでかなり面白いです。
可読性に関しては、はじめてみた人には難しい(or 意味不明)でしょうが、それ以外は使い方次第だと思います。
オペレータオーバーロードなどと一緒で、上手に使えば読みやすくなるけど、下手が乱用すれば地獄絵図と化すわけで

引用:

もし端折った部分のファイルの入出力を実装するとしたら、
FileSystemObjectというのを使うことになるのでしょうか?


そうですね。あるいは javax.script.* を使ってJavaから呼び出すとか、用途によってはAjax+CGIとかも考えられます。
マーサ
ベテラン
会議室デビュー日: 2004/11/26
投稿数: 87
投稿日時: 2007-05-24 10:06
引用:

117さんの書き込み (2007-05-23 16:20) より:
コード:
    /* タブ文字 */
    static String STR_RETERN = "\r\n";


RETURN ?

#しょうもない突っ込みで申し訳ない


いぇいぇ、全然気づいていませんでした
コメントも何気に間違ってるし・・・orz

引用:

Anonymous Cowardさんの書き込み (2007-05-24 01:05) より:

実際にコンパイルして動かしてみましたところ、以下の2点が抜けているようです。
・データがカンマしか含んでいなかった場合、両端のクォート文字を外す。
・データがタブ文字を含んでいた場合、両端にクォート文字を付加する。


あら。

仕様の以下の部分だと思いますが、
引用:

・データが区切り文字、クォート文字、改行のいずれかを含んでいた場合、両端をクォート文字で囲む。
・データが区切り文字、クォート文字、改行のいずれも含まない場合、両端をクォート文字で囲まない。


入力(CSV)データ及び出力(TSV)データはそれぞれExcelで出力した物と同様と
考えていました。。。
なので、囲む方は既に囲まれているので未処理。
囲みを外す方は・・・認識がズレていました、すみません。 ←ここがExcelと違うところですね
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-05-24 11:11
引用:

マーサさんの書き込み (2007-05-24 10:06) より:

仕様の以下の部分だと思いますが、
引用:

・データが区切り文字、クォート文字、改行のいずれかを含んでいた場合、両端をクォート文字で囲む。
・データが区切り文字、クォート文字、改行のいずれも含まない場合、両端をクォート文字で囲まない。


入力(CSV)データ及び出力(TSV)データはそれぞれExcelで出力した物と同様と
考えていました。。。
なので、囲む方は既に囲まれているので未処理。
囲みを外す方は・・・認識がズレていました、すみません。 ←ここがExcelと違うところですね



囲みを外すのは、Excelでもそうなっていませんか?

"あ","ab,cd"

というデータを書いたcsvファイルをExcelで開いて保存しなおすと

あ,"ab,cd"

となります。

スキルアップ/キャリアアップ(JOB@IT)