5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

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

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

1 :ほんとのとこは?:02/05/17 09:46
CSVファイルを読み込ませ、htmlの
表を生成するプログラムの作成で
どの言語で、どのようにすれば、
最小の行数で作れますか?

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

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

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

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



2 :デフォルトの名無しさん:02/05/17 09:48
.

3 :デフォルトの名無しさん:02/05/17 09:49
えくせるひゅーまん

4 :デフォルトの名無しさん:02/05/17 09:49
Cを使えば2行
Javaを使えば1行
エクセルを使えば0行

5 :デフォルトの名無しさん:02/05/17 09:52
DTD使えば変換の必要なし

6 :5:02/05/17 09:56
DTCだった

7 :棄教者 ◆witdLTi2 :02/05/17 09:57
#!/usr/bin/perl
print '<TABLE>';
while(<>) {
 print '<TR>', (map{ '<TD>$_</TD>' } (split /,\s*/)), '<TR>';
}
print '</TABLE>';
==============================
と書いてみるテスト
>>3-4
確かに Excel だと一番早いね。 

8 :デフォルトの名無しさん:02/05/17 09:58
C++!!

9 :デフォルトの名無しさん:02/05/17 10:06
なんか、2getとか現れずに順調だが、
これって単発質問クソスレだよな?
あまりな糞っぷりなので、みんな感覚が麻痺したのか?

10 :デフォルトの名無しさん:02/05/17 10:22
そうそう。
いくら言っても糞スレは立つもんだからいい加減同じことばっかり言うの飽きちゃった

11 :デフォルトの名無しさん:02/05/17 10:30
このケースでもRubyは最強なのか?

速度面は疑問。

12 :デフォルトの名無しさん:02/05/17 10:33
Excelが最強だって

13 :デフォルトの名無しさん:02/05/17 10:34
家電屋行ってバイオ買ってくればすぐに変換できるぞ

14 :デフォルトの名無しさん:02/05/17 10:45
1<<
最速:       アセンブラ
リソース最小:   アセンブラ
開発期間最小:   エクセル
コード行最小:   エクセル
実行ファイルが最小:アセンブラ

というこてでアセンブラが最強ということこのスレ結論がでました。

15 :デフォルトの名無しさん:02/05/17 10:46
>>11
>このケースでもRubyは最強なのか?
なんか11が病気なんですけど。

16 :デフォルトの名無しさん:02/05/17 11:33
>>9 俺は7行プログラミングスレの類だと認識したが。
宿題かなんかだったにしろお題が手軽でよかったんだろ。
(もっとマイナー言語キボン。)

17 :デフォルトの名無しさん:02/05/17 12:14
>>3
>>4
>>12
>>14
エクセルって、アプリじゃ無かった
のか?

いつから言語になったんだろ?

18 :デフォルトの名無しさん:02/05/17 12:15
awk

19 :デフォルトの名無しさん:02/05/17 12:26
では 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
>>17
えくせるVBAじゃ

22 :デフォルトの名無しさん:02/05/17 12:47
19 のコードは D5で60K D6で128Kbyteになります。 
仕事で使うなら TPageProducer 使った方がいいだろけど D6パーソナルで実行出来るように直書しました

23 :デフォルトの名無しさん:02/05/17 12:53
>7
CSVって、こんな単純なパターンマッチでちゃんと分けられたっけ?

CPANにあるCSV取りこみ用のモジュール使ったほうがいいかも
(日本語対応がネックではあるが)

24 :デフォルトの名無しさん:02/05/17 13:01
CSVの規則らしいものって
1、1行に複数の項目が入る。項目は基本的にカンマで区切る
2、 カンマを含むような文字は "文字列"とする
3、 先頭行は項目名の場合がある

かな?

25 :デフォルトの名無しさん:02/05/17 13:07
,"",みたいな項目は",\"\","かな?

26 :デフォルトの名無しさん:02/05/17 13:10
そもそもCSVって
きちんとした規格あるの?

27 :デフォルトの名無しさん:02/05/17 13:12
Excelの実装が仕様です。

28 :デフォルトの名無しさん:02/05/17 13:12
結構いいかげん

29 :デフォルトの名無しさん:02/05/17 13:16
>>25 いや 殆どのCSVで " は ""と2つに変換される だから

","""","



30 :デフォルトの名無しさん:02/05/17 13:19
では書き直し

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


31 :デフォルトの名無しさん:02/05/17 13:22
>>15
11はRuby厨のたわごとを
真に受けてしまう素人さんと
おもわれ。

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

1行ですむのか?


32 :デフォルトの名無しさん:02/05/17 13:23
じゃあ、""みたいな空文字列は許されないんだ。

33 :デフォルトの名無しさん:02/05/17 13:25
>>32 え? 空文字は カンマを続けるだけだと思うが?

34 :       :02/05/17 13:26
いま NHK でバイオリンのいいのやってるな


35 :デフォルトの名無しさん:02/05/17 13:29
ごめん " を含む場合は 必ず その項目を"で囲まれている必要がある。
 だから、単独の " は """" と4つ "が並ぶ事になる

ではコレでどうだ

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

36 :       :02/05/17 13:34
  よかった

 csv には書式があるのですか。なにに使うのでしょう。
これで知りました。
  ttp://mackoy.cool.ne.jp/make/ryfile.html  

37 :デフォルトの名無しさん:02/05/17 15:08
Comma Separated Values
1、 1行で1レコードとし、それぞれのフィールドはカンマで区切られている
2、 少なくともカンマまたは " を含む文字列は "文字列" とした上でカンマで区切られる
3、 文字列中の " は "" と重ねて表現する よって ”1文字は """" である
4、 先頭行はフィールド名の場合もある


38 :棄教者 ◆witdLTi2 :02/05/17 16:36
>>7のPerlの例は引用符を鹿としていたので
鬱で氏にます

39 :デフォルトの名無しさん:02/05/17 16:56
結局、
テストコードを素早く書けるのはPerl
ちゃんと動くコードを最初に出せるのはDelphiという事で


40 :デフォルトの名無しさん:02/05/17 17:01
>>1
実行ファイルのサイズや、ソースの行数に意味があるのでしょうか?

必要なのは、少ない行数で書けることではなく、素早く書けるかという点にあるように思いますよ


41 :デフォルトの名無しさん:02/05/17 17:24
Delphiだとperserの部分で少し楽出来るからなあ

JAVAだとStreamTokenizer 使えばいいけど、なんだかなあ

42 :デフォルトの名無しさん:02/05/17 17:47
エクセルか Perl でいいじゃん。
必要になったら書き捨てる程度のもんじゃない?

43 :デフォルトの名無しさん:02/05/17 17:52
>>42
 じゃ書き捨ててみて下さい

44 :デフォルトの名無しさん:02/05/17 17:56
CSVをEXCELに読み込ませると変な解釈しない?

45 :デフォルトの名無しさん:02/05/17 18:05
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;
}

46 :デフォルトの名無しさん:02/05/17 18:18
>>43
いや、別に必要としてないし。
それよりも CVS から HTML 表生成かと思ってたのに
csv だったのでがっかり。

47 :デフォルトの名無しさん:02/05/17 19:26
そもそも、CSVの書式っていい加減で、
「カンマ区切りである」くらいしか統一されていない。
""の解釈も統一されているワケじゃない
1が仕様を出さないことにはどうにも。



48 :デフォルトの名無しさん:02/05/17 19:33
>>39
テストコードを素早く書けるのはPerlとの事ですが

よく、この板で見かけるRubyは?



49 :デフォルトの名無しさん:02/05/17 19:41
>>48 書いてみれば?

50 :デフォルトの名無しさん :02/05/17 19:46
ASP.NETでサーバーコントロールにDATAGRIDを使うのが催促

51 :デフォルトの名無しさん:02/05/17 19:55
>>48
>よく、この板で見かけるRuby
↑なかなか的を射た表現やね

52 :デフォルトの名無しさん:02/05/17 20:06
>>1
DreamWeaverを使えばコード書かないでできる。
ソートもできる。一番実用的で現実的。

53 :デフォルトの名無しさん:02/05/17 20:19
>>1
Excelを使えばコード書かないでできる。
ソートもできる。一番実用的で現実的。

54 :デフォルトの名無しさん:02/05/17 20:23
エクセルってHTMLを吐き出すの?
アフォですみません。

55 :デフォルトの名無しさん:02/05/17 20:34
>>54 すごく汚いけどね

56 :デフォルトの名無しさん:02/05/17 20:38
じゃあ、、、

おまえら!
HTMLソースからCSV形式のファイルを生成するソースを書いてください

57 :デフォルトの名無しさん:02/05/17 20:41
不可能

58 :デフォルトの名無しさん:02/05/17 20:46
>>57
まあ、お前にはな。

59 :shige:02/05/17 20:49
rじゅby

60 :デフォルトの名無しさん:02/05/17 21:02
マ板のほうにCSVスレあった気がするが。そこでの結論はCSVに規格がないので完全な処理は不可能。
つー、身もふたもない結論だった気がするんだが。あのスレどこだっけな。

61 :デフォルトの名無しさん:02/05/17 21:02
>>47
そのいい加減なものを上手く guess してくれるコードがほしいんじゃないカナ?

62 :デフォルトの名無しさん:02/05/17 21:10
>>61
人工知能が必要と思う。
guess が「当て推量を言う」の方なら何とかなると思うが。

63 :デフォルトの名無しさん:02/05/17 21:17
>>53
一番といえるかどうか。

無駄タグ削除によるダイエットの
手間が、無視出来ない事もある。

64 :デフォルトの名無しさん:02/05/17 21:56
>>62
じゃあLISPか(w
list<->csvなんて朝飯前だし
ちょうどlist<->HTMLなんてのも専用スレにある。

65 :デフォルトの名無しさん:02/05/17 22:04
>>64いいね

66 :デフォルトの名無しさん:02/05/17 22:24
lex。パターンマッチング以外無能。
それだけは宇宙最強の速度(・∇・)

%%
[^,\n]*, {
yytext[strlen(yytext) - 1] = '\0';
printf("<TD>%s<TD>", yytext);
}
\n printf("</TR><TR>");
. ;
%%

67 :デフォルトの名無しさん:02/05/17 23:02
>>66
意味わかんね。

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よ 結論は何なんだ!

70 :1:02/05/23 04:20
皆さん、いろいろな意見ありがとうございます。

>>69
いえ、結論はでてません。

まず、この板でよく見かける、言語
間の優劣合戦を拝見していると、
さまざまな観点での優劣の主張が、
乱れとんでいる様でした。
そしてそのうち”○○信者必死”
”○○厨ウザイ”というののしりあいの様になっているので。

それで、具体的なテーマを提示すれ
ば、それぞれの観点における、
このポイントでは、この言語が最強
っていう一応の結論が得られそうな
ので、スレ立てをさせて頂いた所です。

一応、現時点では、ちょこっと作って試すスクリプト系言語ではperl最強。

実用的で高性能なものを簡単に作るにはDelphi最強。

プログラマに要求される多大なスキルと、膨大な工数を許容可能ならば
アセンブラ最強。

の様ですが、まだまだ、他の言語からの、反対意見ありそうなので、ひきつづき意見募集ちゅうでつ。

71 :デフォルトの名無しさん:02/05/23 04:42
>実用的で高性能なものを簡単に作るにはDelphi最強。
理由は?

72 :デフォルトの名無しさん:02/05/23 04:46
自分が使える言語を使うのが最強

73 :デフォルトの名無しさん:02/05/23 05:08
>>71
19
39
41
のレスと
perlについで、動くサンプルソース
がソッコーで提供された点。

VBやVC++のサンプルが無いのは
動くサンプルを作るのが面倒だと
推測出来るところ。

74 :デフォルトの名無しさん:02/05/23 07:03
んじゃ、いちおー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;
}


75 :棄教者 ◆witdLTi2 :02/05/23 09:29
糞スレ立てた>>1
ソースを最初に提供したのは>>7だぞ。長さも一番短い。
あと一番イージー&プレインな解決法(Excel)を示したのは>>3>>4だ。
お前の目は節穴かと小一時間問いつめるぞ。
それが嫌なら削除依頼出すか牛鮭定食でも食ってろ。

76 :デフォルトの名無しさん:02/05/23 11:28
>>74

ええのう、C++らしいソースやのう
でもboostは標準じゃないと思う。

77 :デフォルトの名無しさん:02/05/23 11:42
>>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:=、+などで始まる項目は式になってしまう
     ""でくくっても無駄(あくまで、中身を評価した値が優先する)

79 :デフォルトの名無しさん:02/05/25 05:34
>>73
BCBでDelphiと同じようなソース出したら、C++最強ってことになる?

80 :デフォルトの名無しさん:02/05/25 08:24
どの言語がいいかなんて、作る物と作る人で違ってくるだろ。
最強の言語が存在するなら今ごろ言語は一つに統一されてる。

81 :デフォルトの名無しさん:02/05/25 08:31
とりあえず速くコード出した言語順で 1位Perl 2位Delphi なんだからそれでいいじゃない

じゃあ次は
>>37 に準拠したコードで競争する?

>>19のコードは"aa,bb",cc のようなデータは処理出来るけど
"aa bb",cc dd, のように"で括らずに空白が入った場合もセパレートするから

82 :デフォルトの名無しさん:02/05/25 08:56
>>81
つーか、早い者勝ちならスレを早く見た人やすでにソースがある人の
勝ちじゃない。せめて条件としてスクラッチから書くことと作成時間を
明記することが必要じゃない。

もっと言えば、言語の比較なら作成者のスキルも同じ方がいいだろうね。

83 :デフォルトの名無しさん:02/05/25 08:57
3の仕様が不明なんだけど

84 :デフォルトの名無しさん:02/05/25 09:25
2、 少なくともカンマまたは " を含む文字列は "文字列" とした上でカンマで区切られる
   カンマ直後の"だけを見ればいい カンマ直後以外の"については好きなように処理可
   "で囲まれていない空白を含む文字についても実装依存可

3、 文字列中の " は "" と重ねて表現する よって ”1文字は """" である
   """"       ->"
   "この""もじ"  ->この"もじ
   ""         -> 空




85 :デフォルトの名無しさん:02/05/25 09:43
>>78
デファクトスタンダードと言う言葉を知らんのか...。

86 :デフォルトの名無しさん:02/05/25 09:52
>>78
方言2は普通はどうなるの?
>あ"い,う"え,お
たとえば、これ。

87 :デフォルトの名無しさん:02/05/25 10:34
>>86 普通は、ややこしい文字を含む場合は "で囲むから問題にならないのでしょう

方言3、改行の件は、改行を含むレコードをエンコードするスタンダードが無いから仕方がない

最初にややこしい文字は全部 %16進2桁 とかやればキレイだったかもしれないね
あるいは \n とかc言語方式とか

88 :デフォルトの名無しさん:02/05/25 10:36
Delphiのコードの改良なら CommaTextへの代入を
ttp://www.din.or.jp/~egawa-n/delphi/func.html ここの CsvSeparateに変更すればそれでいいんじゃない?


89 :デフォルトの名無しさん:02/05/25 10:47
>>88
そんなこと言ったら、C++はεπιστημη氏のCSVTokenizerで一発っす

90 :デフォルトの名無しさん:02/05/25 11:12
改行の問題を >>88-89 は解決出来ないと思うな

文字列全体を先頭から処理してゆくしかないでしょ

91 :デフォルトの名無しさん:02/05/25 11:15
>>90
>>33に準拠したコードって話なのに、どうしてexcel準拠前提で話し始めるの?

92 :1:02/05/26 15:53
>>75

すみません、不適切な部分を訂正します。

コンパイルするタイプで実用的で
高性能なものを簡単に作るにはDelphi最強。

perlのソースが最も早く短く提示
された事は認識してまして

スクリプト系最強と表現しましたが

Delphiについてが不適切でした。
 
その後、C++が提示されましたので
Delphi最強から、Delphi最強?に
なりました。

拝見した後、牛鮭定を食いに逝きましたが、財布をチェックしたら並
しか食えませんでした。

93 :デフォルトの名無しさん:02/05/26 15:59
Delphi最強。C++?( ´,_ゝ`)プッ

94 :デフォルトの名無しさん:02/05/26 16:01
それは牛鮭定食の並を食べたってこと?


95 :デフォルトの名無しさん:02/05/26 17:58
>>94
牛丼です。
単に「並」とたのんだので。

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.


97 :デフォルトの名無しさん:02/05/29 12:53
CommaTextって挙動おかしいよね。

98 :デフォルトの名無しさん:02/05/29 13:53
基本的にCommaTextは 自分で吐いたものを自分で読めたらいいや程度にしてる感じ

””で囲まないで空白が入っていた時とか そこでセパレートされてしまうね
だから読み込みするなら >>88 のようなのを自作するしかないと思う



99 :デフォルトの名無しさん:02/05/29 16:29
1って丁寧なんだがDQNなんだがわがんね〜

100 :デフォルトの名無しさん:02/05/29 18:35
遅くてもいいから、COBOLとか、PL-Iとか、
その他の古代言語の完全なプログラムも
見てみたい気がする。

101 :デフォルトの名無しさん:02/05/29 23:10
>>100
BASICもほしいところだね

102 :デフォルトの名無しさん:02/05/30 03:06
関数型言語で誰か書いて下さい。できればML系で。

103 :デフォルトの名無しさん:02/05/30 03:07
>>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();

105 :デフォルトの名無しさん:02/07/05 00:22
俺言語の csv2html が最強。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)