トップページ⇒tech
105コメント31KB

csvからhtml表生成最強言語は?

■ このスレッドは過去ログ倉庫に格納されています
0001ほんとのとこは?NGNG
CSVファイルを読み込ませ、htmlの
表を生成するプログラムの作成で
どの言語で、どのようにすれば、
最小の行数で作れますか?

または、実行ファイルが最小サイズ
になるのはどれですか?

または、csvファイルを選択してか
ら、html表が生成されるまでの
時間が最短なのはどれですか?

簡単そうで、使い道がありそうな
このプログラムで
どの言語をどのように使うのが
最強か?教えて下さい。

実例での具体的な比較をみてみたいです。

0002デフォルトの名無しさんNGNG
.
0003デフォルトの名無しさんNGNG
えくせるひゅーまん
0004デフォルトの名無しさんNGNG
Cを使えば2行
Javaを使えば1行
エクセルを使えば0行
0005デフォルトの名無しさんNGNG
DTD使えば変換の必要なし
00065NGNG
DTCだった
0007棄教者 ◆witdLTi2 NGNG
#!/usr/bin/perl
print '<TABLE>';
while(<>) {
 print '<TR>', (map{ '<TD>$_</TD>' } (split /,\s*/)), '<TR>';
}
print '</TABLE>';
==============================
と書いてみるテスト
>>3-4
確かに Excel だと一番早いね。 
0008デフォルトの名無しさんNGNG
C++!!
0009デフォルトの名無しさんNGNG
なんか、2getとか現れずに順調だが、
これって単発質問クソスレだよな?
あまりな糞っぷりなので、みんな感覚が麻痺したのか?
0010デフォルトの名無しさんNGNG
そうそう。
いくら言っても糞スレは立つもんだからいい加減同じことばっかり言うの飽きちゃった
0011デフォルトの名無しさんNGNG
このケースでもRubyは最強なのか?

速度面は疑問。
0012デフォルトの名無しさんNGNG
Excelが最強だって
0013デフォルトの名無しさんNGNG
家電屋行ってバイオ買ってくればすぐに変換できるぞ
0014デフォルトの名無しさんNGNG
1<<
最速:       アセンブラ
リソース最小:   アセンブラ
開発期間最小:   エクセル
コード行最小:   エクセル
実行ファイルが最小:アセンブラ

というこてでアセンブラが最強ということこのスレ結論がでました。
0015デフォルトの名無しさんNGNG
>>11
>このケースでもRubyは最強なのか?
なんか11が病気なんですけど。
0016デフォルトの名無しさんNGNG
>>9 俺は7行プログラミングスレの類だと認識したが。
宿題かなんかだったにしろお題が手軽でよかったんだろ。
(もっとマイナー言語キボン。)
0017デフォルトの名無しさんNGNG
>>3
>>4
>>12
>>14
エクセルって、アプリじゃ無かった
のか?

いつから言語になったんだろ?
0018デフォルトの名無しさんNGNG
awk
0019デフォルトの名無しさんNGNG
では 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.
0020デフォルトの名無しさんNGNG
Tclだと、どうなんだろ。

1コマンド1行だから
結構長くなるか。

それとも変換コマンドがあって
1発とかか?
0021デフォルトの名無しさんNGNG
>>17
えくせるVBAじゃ
0022デフォルトの名無しさんNGNG
19 のコードは D5で60K D6で128Kbyteになります。 
仕事で使うなら TPageProducer 使った方がいいだろけど D6パーソナルで実行出来るように直書しました
0023デフォルトの名無しさんNGNG
>7
CSVって、こんな単純なパターンマッチでちゃんと分けられたっけ?

CPANにあるCSV取りこみ用のモジュール使ったほうがいいかも
(日本語対応がネックではあるが)
0024デフォルトの名無しさんNGNG
CSVの規則らしいものって
1、1行に複数の項目が入る。項目は基本的にカンマで区切る
2、 カンマを含むような文字は "文字列"とする
3、 先頭行は項目名の場合がある

かな?
0025デフォルトの名無しさんNGNG
,"",みたいな項目は",\"\","かな?
0026デフォルトの名無しさんNGNG
そもそもCSVって
きちんとした規格あるの?
0027デフォルトの名無しさんNGNG
Excelの実装が仕様です。
0028デフォルトの名無しさんNGNG
結構いいかげん
0029デフォルトの名無しさんNGNG
>>25 いや 殆どのCSVで " は ""と2つに変換される だから

","""","

0030デフォルトの名無しさんNGNG
では書き直し

1、 1行に複数の項目が入る。
2、 項目は基本的にカンマで区切る
3、 文字列は必ず "文字列" とする流儀と 必ずしもそうしないものがある
4、 少なくともカンマを含むような文字は "文字列"とする
5、 もし 文字列中に " を一つ含む場合は ""と重ねる
6、 先頭行は項目名の場合がある が、それを区別する手段はない
0031デフォルトの名無しさんNGNG
>>15
11はRuby厨のたわごとを
真に受けてしまう素人さんと
おもわれ。

でも、まじめな話しRubyで処理
させるとすると、何行くらいに
なるんだ。

1行ですむのか?
0032デフォルトの名無しさんNGNG
じゃあ、""みたいな空文字列は許されないんだ。
0033デフォルトの名無しさんNGNG
>>32 え? 空文字は カンマを続けるだけだと思うが?
0034       NGNG
いま NHK でバイオリンのいいのやってるな
0035デフォルトの名無しさんNGNG
ごめん " を含む場合は 必ず その項目を"で囲まれている必要がある。
 だから、単独の " は """" と4つ "が並ぶ事になる

ではコレでどうだ

1、 1行に複数の項目が入る。
2、 項目は基本的にカンマで区切る
3、 文字列は必ず "文字列" とする流儀と 必ずしもそうしないものがある
4、 少なくともカンマか"を含むような文字は "文字列"とする
5、 もし 文字列中に " を一つ含む場合は ""と重ねる
6、 先頭行は項目名の場合がある が、それを区別する手段はない
0036       NGNG
  よかった

 csv には書式があるのですか。なにに使うのでしょう。
これで知りました。
  ttp://mackoy.cool.ne.jp/make/ryfile.html  
0037デフォルトの名無しさんNGNG
Comma Separated Values
1、 1行で1レコードとし、それぞれのフィールドはカンマで区切られている
2、 少なくともカンマまたは " を含む文字列は "文字列" とした上でカンマで区切られる
3、 文字列中の " は "" と重ねて表現する よって ”1文字は """" である
4、 先頭行はフィールド名の場合もある
0038棄教者 ◆witdLTi2 NGNG
>>7のPerlの例は引用符を鹿としていたので
鬱で氏にます
0039デフォルトの名無しさんNGNG
結局、
テストコードを素早く書けるのはPerl
ちゃんと動くコードを最初に出せるのはDelphiという事で
0040デフォルトの名無しさんNGNG
>>1
実行ファイルのサイズや、ソースの行数に意味があるのでしょうか?

必要なのは、少ない行数で書けることではなく、素早く書けるかという点にあるように思いますよ
0041デフォルトの名無しさんNGNG
Delphiだとperserの部分で少し楽出来るからなあ

JAVAだとStreamTokenizer 使えばいいけど、なんだかなあ
0042デフォルトの名無しさんNGNG
エクセルか Perl でいいじゃん。
必要になったら書き捨てる程度のもんじゃない?
0043デフォルトの名無しさんNGNG
>>42
 じゃ書き捨ててみて下さい
0044デフォルトの名無しさんNGNG
CSVをEXCELに読み込ませると変な解釈しない?
0045デフォルトの名無しさんNGNG
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;
}
0046デフォルトの名無しさんNGNG
>>43
いや、別に必要としてないし。
それよりも CVS から HTML 表生成かと思ってたのに
csv だったのでがっかり。
0047デフォルトの名無しさんNGNG
そもそも、CSVの書式っていい加減で、
「カンマ区切りである」くらいしか統一されていない。
""の解釈も統一されているワケじゃない
1が仕様を出さないことにはどうにも。

■ このスレッドは過去ログ倉庫に格納されています