1 :
ほんとのとこは? :
02/05/17 09:46 CSVファイルを読み込ませ、htmlの 表を生成するプログラムの作成で どの言語で、どのようにすれば、 最小の行数で作れますか? または、実行ファイルが最小サイズ になるのはどれですか? または、csvファイルを選択してか ら、html表が生成されるまでの 時間が最短なのはどれですか? 簡単そうで、使い道がありそうな このプログラムで どの言語をどのように使うのが 最強か?教えて下さい。 実例での具体的な比較をみてみたいです。
.
えくせるひゅーまん
Cを使えば2行 Javaを使えば1行 エクセルを使えば0行
DTD使えば変換の必要なし
DTCだった
#!/usr/bin/perl
print '<TABLE>';
while(<>) {
print '<TR>', (map{ '<TD>$_</TD>' } (split /,\s*/)), '<TR>';
}
print '</TABLE>';
==============================
と書いてみるテスト
>>3-4 確かに Excel だと一番早いね。
C++!!
なんか、2getとか現れずに順調だが、 これって単発質問クソスレだよな? あまりな糞っぷりなので、みんな感覚が麻痺したのか?
そうそう。 いくら言っても糞スレは立つもんだからいい加減同じことばっかり言うの飽きちゃった
11 :
デフォルトの名無しさん :02/05/17 10:30
このケースでもRubyは最強なのか? 速度面は疑問。
Excelが最強だって
家電屋行ってバイオ買ってくればすぐに変換できるぞ
1<< 最速: アセンブラ リソース最小: アセンブラ 開発期間最小: エクセル コード行最小: エクセル 実行ファイルが最小:アセンブラ というこてでアセンブラが最強ということこのスレ結論がでました。
>>11 >このケースでもRubyは最強なのか?
なんか11が病気なんですけど。
>>9 俺は7行プログラミングスレの類だと認識したが。
宿題かなんかだったにしろお題が手軽でよかったんだろ。
(もっとマイナー言語キボン。)
17 :
デフォルトの名無しさん :02/05/17 12:14
18 :
デフォルトの名無しさん :02/05/17 12:15
awk
では object pascal の例 program CSV2HTML; uses SysUtils,Windows,Classes,shellapi; function f(fname:string):TStrings; var i,j:Integer; var w:TStrings; var s:string; begin w:=TStringList.Create; try Result:=TStringList.Create; Result.Add('<HTML><HEAD><TITLE>'+fname+'</TITLE></HEAD><BODY>'); Result.Add('<TABLE BORDER>'); if FileExists(ParamStr(1)) then with TStringList.Create do try LoadFromFile(ParamStr(1)); for i:=0 to Count-1 do begin w.CommaText:=Strings[i]; s:='<TR>'; for j:=0 to w.Count-1 do s:=s+'<TD>'+w.Strings[j]; Result.Add(s); end; finally free;end; finally w.free;end; Result.Add(' </TABLE></BODY></HTML>') end; var fname,wfname:string; begin if ParamCount=1 then begin fname:= ParamStr(1); if FileExists(fname) then begin wfname:=ChangeFileExt(fname,'.html'); with f(fname) do try SaveToFile(wfname); ShellExecute(0,'open',PChar(wfname),nil,nil,SW_SHOWNORMAL); finally free;end; end; end; end.
20 :
デフォルトの名無しさん :02/05/17 12:42
Tclだと、どうなんだろ。 1コマンド1行だから 結構長くなるか。 それとも変換コマンドがあって 1発とかか?
21 :
デフォルトの名無しさん :02/05/17 12:45
19 のコードは D5で60K D6で128Kbyteになります。 仕事で使うなら TPageProducer 使った方がいいだろけど D6パーソナルで実行出来るように直書しました
>7 CSVって、こんな単純なパターンマッチでちゃんと分けられたっけ? CPANにあるCSV取りこみ用のモジュール使ったほうがいいかも (日本語対応がネックではあるが)
CSVの規則らしいものって 1、1行に複数の項目が入る。項目は基本的にカンマで区切る 2、 カンマを含むような文字は "文字列"とする 3、 先頭行は項目名の場合がある かな?
25 :
デフォルトの名無しさん :02/05/17 13:07
,"",みたいな項目は",\"\","かな?
そもそもCSVって きちんとした規格あるの?
Excelの実装が仕様です。
結構いいかげん
>>25 いや 殆どのCSVで " は ""と2つに変換される だから
","""","
では書き直し 1、 1行に複数の項目が入る。 2、 項目は基本的にカンマで区切る 3、 文字列は必ず "文字列" とする流儀と 必ずしもそうしないものがある 4、 少なくともカンマを含むような文字は "文字列"とする 5、 もし 文字列中に " を一つ含む場合は ""と重ねる 6、 先頭行は項目名の場合がある が、それを区別する手段はない
31 :
デフォルトの名無しさん :02/05/17 13:22
>>15 11はRuby厨のたわごとを
真に受けてしまう素人さんと
おもわれ。
でも、まじめな話しRubyで処理
させるとすると、何行くらいに
なるんだ。
1行ですむのか?
じゃあ、""みたいな空文字列は許されないんだ。
>>32 え? 空文字は カンマを続けるだけだと思うが?
いま NHK でバイオリンのいいのやってるな
ごめん " を含む場合は 必ず その項目を"で囲まれている必要がある。 だから、単独の " は """" と4つ "が並ぶ事になる ではコレでどうだ 1、 1行に複数の項目が入る。 2、 項目は基本的にカンマで区切る 3、 文字列は必ず "文字列" とする流儀と 必ずしもそうしないものがある 4、 少なくともカンマか"を含むような文字は "文字列"とする 5、 もし 文字列中に " を一つ含む場合は ""と重ねる 6、 先頭行は項目名の場合がある が、それを区別する手段はない
Comma Separated Values 1、 1行で1レコードとし、それぞれのフィールドはカンマで区切られている 2、 少なくともカンマまたは " を含む文字列は "文字列" とした上でカンマで区切られる 3、 文字列中の " は "" と重ねて表現する よって ”1文字は """" である 4、 先頭行はフィールド名の場合もある
>>7 のPerlの例は引用符を鹿としていたので
鬱で氏にます
結局、 テストコードを素早く書けるのはPerl ちゃんと動くコードを最初に出せるのはDelphiという事で
>>1 実行ファイルのサイズや、ソースの行数に意味があるのでしょうか?
必要なのは、少ない行数で書けることではなく、素早く書けるかという点にあるように思いますよ
41 :
デフォルトの名無しさん :02/05/17 17:24
Delphiだとperserの部分で少し楽出来るからなあ JAVAだとStreamTokenizer 使えばいいけど、なんだかなあ
エクセルか Perl でいいじゃん。 必要になったら書き捨てる程度のもんじゃない?
CSVをEXCELに読み込ませると変な解釈しない?
use strict; print "<table>\n"; while(<>) { print "\t<tr>"; s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; print map { /^"(.*)"$/ ? '<td>' . escape(scalar($_ = $1, s/""/"/g, $_)) . '</td>' : '<td>' . escape($_) . '</td>' } (/("[^"]*(?:""[^"]*)*"|[^,]*),/g); print "</tr>\n" } print "</table>\n"; sub escape { my $str = shift; $str =~ s/&/&/g; $str =~ s/</</g; $str =~ s/>/>/g; return $str; }
>>43 いや、別に必要としてないし。
それよりも CVS から HTML 表生成かと思ってたのに
csv だったのでがっかり。
そもそも、CSVの書式っていい加減で、 「カンマ区切りである」くらいしか統一されていない。 ""の解釈も統一されているワケじゃない 1が仕様を出さないことにはどうにも。
48 :
デフォルトの名無しさん :02/05/17 19:33
>>39 テストコードを素早く書けるのはPerlとの事ですが
よく、この板で見かけるRubyは?
ASP.NETでサーバーコントロールにDATAGRIDを使うのが催促
>>48 >よく、この板で見かけるRuby
↑なかなか的を射た表現やね
>>1 DreamWeaverを使えばコード書かないでできる。
ソートもできる。一番実用的で現実的。
>>1 Excelを使えばコード書かないでできる。
ソートもできる。一番実用的で現実的。
エクセルってHTMLを吐き出すの? アフォですみません。
56 :
デフォルトの名無しさん :02/05/17 20:38
じゃあ、、、 おまえら! HTMLソースからCSV形式のファイルを生成するソースを書いてください
不可能
rじゅby
マ板のほうにCSVスレあった気がするが。そこでの結論はCSVに規格がないので完全な処理は不可能。 つー、身もふたもない結論だった気がするんだが。あのスレどこだっけな。
>>47 そのいい加減なものを上手く guess してくれるコードがほしいんじゃないカナ?
>>61 人工知能が必要と思う。
guess が「当て推量を言う」の方なら何とかなると思うが。
63 :
デフォルトの名無しさん :02/05/17 21:17
>>53 一番といえるかどうか。
無駄タグ削除によるダイエットの
手間が、無視出来ない事もある。
>>62 じゃあLISPか(w
list<->csvなんて朝飯前だし
ちょうどlist<->HTMLなんてのも専用スレにある。
65 :
デフォルトの名無しさん :02/05/17 22:04
lex。パターンマッチング以外無能。 それだけは宇宙最強の速度(・∇・) %% [^,\n]*, { yytext[strlen(yytext) - 1] = '\0'; printf("<TD>%s<TD>", yytext); } \n printf("</TR><TR>"); . ; %%
68 :
デフォルトの名無しさん :02/05/19 10:13
perlだろうとrubyだろうと似たように書けば同じように動くでしょ。 puts "<table>" readlines.each do |t|  puts "<tr><td>" + t.chop!.gsub!(/,/,"</td><td>") + "</td></tr>" end puts "</table>"
69 :
デフォルトの名無しさん :02/05/20 16:59
で? 1よ 結論は何なんだ!
皆さん、いろいろな意見ありがとうございます。
>>69 いえ、結論はでてません。
まず、この板でよく見かける、言語
間の優劣合戦を拝見していると、
さまざまな観点での優劣の主張が、
乱れとんでいる様でした。
そしてそのうち”○○信者必死”
”○○厨ウザイ”というののしりあいの様になっているので。
それで、具体的なテーマを提示すれ
ば、それぞれの観点における、
このポイントでは、この言語が最強
っていう一応の結論が得られそうな
ので、スレ立てをさせて頂いた所です。
一応、現時点では、ちょこっと作って試すスクリプト系言語ではperl最強。
実用的で高性能なものを簡単に作るにはDelphi最強。
プログラマに要求される多大なスキルと、膨大な工数を許容可能ならば
アセンブラ最強。
の様ですが、まだまだ、他の言語からの、反対意見ありそうなので、ひきつづき意見募集ちゅうでつ。
>実用的で高性能なものを簡単に作るにはDelphi最強。 理由は?
自分が使える言語を使うのが最強
73 :
デフォルトの名無しさん :02/05/23 05:08
>>71 19
39
41
のレスと
perlについで、動くサンプルソース
がソッコーで提供された点。
VBやVC++のサンプルが無いのは
動くサンプルを作るのが面倒だと
推測出来るところ。
んじゃ、いちおーC++出しておく。 #include <iostream> #include <string> #include <sstream> #include <functional> #include <algorithm> #include <boost/tokenizer.hpp> template<typename T> class table_writer : public std::unary_function<std::basic_string<T>, void> { std::basic_ostream<T>& stream_; public: table_writer(std::basic_ostream<T>& stream) : stream_(stream){ } void operator()(std::basic_string<T> elem) { stream_ << "<td>" << elem << "</td>"; } }; template<typename T> void csv2html( std::basic_istream<T>& in, std::basic_ostream<T>& out) { boost::char_separator<T> d(","); out << "<html><head><title></title></head><body><table border=1>"; std::basic_string<T> line; while (!std::getline(in, line).eof()) { boost::tokenizer< boost::char_separator<T>, std::basic_string<T>::const_iterator, std::basic_string<T> > t(line, d); out << "<tr>"; std::for_each(t.begin(), t.end(), table_writer<T>(out)); out << "</tr>"; } out << "</table></body></html>"; } int main() { std::basic_ostringstream<char> ss; csv2html<char>(std::cin, ss); std::cout << ss.str(); return 0; }
糞スレ立てた
>>1 へ
ソースを最初に提供したのは
>>7 だぞ。長さも一番短い。
あと一番イージー&プレインな解決法(Excel)を示したのは
>>3 >>4 だ。
お前の目は節穴かと小一時間問いつめるぞ。
それが嫌なら削除依頼出すか牛鮭定食でも食ってろ。
>>74 ええのう、C++らしいソースやのう
でもboostは標準じゃないと思う。
>>74 実はUNICODEにも使えそうで全く使うことが出来ない罠
78 :
デフォルトの名無しさん :02/05/25 04:41
上のほうでExcelの*.csvが標準みたいに書かれているけど、 Excelの*.csvってのはローカル仕様だらけだぞ。 Excelに完全準拠しようとすると悲惨な目にあう。 (まだAccessのほうがスジがいい。) 以下の方言をまじめにインプリメントする気になる? 方言1:"009"は文字列「009]とは解釈されず、数値「9」と解釈される つまり、"〜"は、文字列であることを意味しない 0で始まる数字の文字列をそのまま渡す方法はない 方言2:赤"は、文字列「赤"」と解釈される つまり、項目の先頭でない「"」は単なる文字扱い 方言3:"〜"の中では、CR/LFかLFで項目内改行ができる つまり、トップダウンで1行読み込み→1項目取り出し というロジックが組めない(頭から順に1項目ずつ取り出し、 その値を評価しながら読むしかない) 方言4:=、+などで始まる項目は式になってしまう ""でくくっても無駄(あくまで、中身を評価した値が優先する)
>>73 BCBでDelphiと同じようなソース出したら、C++最強ってことになる?
どの言語がいいかなんて、作る物と作る人で違ってくるだろ。 最強の言語が存在するなら今ごろ言語は一つに統一されてる。
とりあえず速くコード出した言語順で 1位Perl 2位Delphi なんだからそれでいいじゃない
じゃあ次は
>>37 に準拠したコードで競争する?
>>19 のコードは"aa,bb",cc のようなデータは処理出来るけど
"aa bb",cc dd, のように"で括らずに空白が入った場合もセパレートするから
>>81 つーか、早い者勝ちならスレを早く見た人やすでにソースがある人の
勝ちじゃない。せめて条件としてスクラッチから書くことと作成時間を
明記することが必要じゃない。
もっと言えば、言語の比較なら作成者のスキルも同じ方がいいだろうね。
3の仕様が不明なんだけど
2、 少なくともカンマまたは " を含む文字列は "文字列" とした上でカンマで区切られる カンマ直後の"だけを見ればいい カンマ直後以外の"については好きなように処理可 "で囲まれていない空白を含む文字についても実装依存可 3、 文字列中の " は "" と重ねて表現する よって ”1文字は """" である """" ->" "この""もじ" ->この"もじ "" -> 空
>>78 デファクトスタンダードと言う言葉を知らんのか...。
>>78 方言2は普通はどうなるの?
>あ"い,う"え,お
たとえば、これ。
>>86 普通は、ややこしい文字を含む場合は "で囲むから問題にならないのでしょう
方言3、改行の件は、改行を含むレコードをエンコードするスタンダードが無いから仕方がない
最初にややこしい文字は全部 %16進2桁 とかやればキレイだったかもしれないね
あるいは \n とかc言語方式とか
>>88 そんなこと言ったら、C++はεπιστημη氏のCSVTokenizerで一発っす
90 :
デフォルトの名無しさん :02/05/25 11:12
改行の問題を
>>88-89 は解決出来ないと思うな
文字列全体を先頭から処理してゆくしかないでしょ
>>90 >>33 に準拠したコードって話なのに、どうしてexcel準拠前提で話し始めるの?
>>75 すみません、不適切な部分を訂正します。
コンパイルするタイプで実用的で
高性能なものを簡単に作るにはDelphi最強。
perlのソースが最も早く短く提示
された事は認識してまして
スクリプト系最強と表現しましたが
Delphiについてが不適切でした。
その後、C++が提示されましたので
Delphi最強から、Delphi最強?に
なりました。
拝見した後、牛鮭定を食いに逝きましたが、財布をチェックしたら並
しか食えませんでした。
Delphi最強。C++?( ´,_ゝ`)プッ
それは牛鮭定食の並を食べたってこと?
96 :
Delphi標準入出力バージョン :02/05/29 09:27
program cvs2html; {$apptype console} uses Classes, SysUtils; var i: Integer; s: String; cvs: TStrings; begin cvs := TStringList.Create; if ParamCount = 1 then s := ParamStr(1) else s := 'noname'; Writeln('<HTML><HEAD><TITLE>', s, '</TITLE></HEAD><BODY><TABLE BORDER>'); while not Eof(Input) do begin Readln(s); cvs.CommaText := s; Writeln('<TR>'); for i := 0 to cvs.Count-1 do Writeln(' <TD>', cvs[i], '</TD>'); Writeln('</TR>'); end; Writeln('</TABLE></BODY></HTML>'); end.
CommaTextって挙動おかしいよね。
98 :
デフォルトの名無しさん :02/05/29 13:53
基本的にCommaTextは 自分で吐いたものを自分で読めたらいいや程度にしてる感じ
””で囲まないで空白が入っていた時とか そこでセパレートされてしまうね
だから読み込みするなら
>>88 のようなのを自作するしかないと思う
99 :
デフォルトの名無しさん :02/05/29 16:29
1って丁寧なんだがDQNなんだがわがんね〜
遅くてもいいから、COBOLとか、PL-Iとか、 その他の古代言語の完全なプログラムも 見てみたい気がする。
関数型言語で誰か書いて下さい。できればML系で。
>>102 意味あるのか?
副作用使いまくりになるじゃん
104 :
デフォルトの名無しさん :02/05/30 03:17
CSVReader in = new CSVReader(new FileReader("csv")); HTMLTableWriter out = new HTMLTableWriter(new FileWriter("html")); String[] line; while((line = in.next()) != null) out.write(line); out.close(); in.close();
俺言語の csv2html が最強。