• 締切済み

csvについて

初めて投稿させていただきます。 今回はプログラムとは直接関係はないのですが・・・・ いま、C++でcsvを読み込んでテンプレートxmlの中身を読み込んだcsvのデータに書き換えて出力するサンプルを作成しているんですけど、会社の人に出されたお題の意味が分からなくて>< そのお題というのが テンプレートを以下のようにして -- <root>  <datas>   <key>${0}</key>   <value>${1}</key>   <extdatas>    <extra>${2-}</extra>   </extdatas>  </datas> </root> -- CSVの各行を<datas>として表現して、 各行の2カラム目移行を<extdatas>中の<extra>として表現して下さい。 というものなんですけど、 CSVの各行を<datas>として表現して、 各行の2カラム目移行を<extdatas>中の<extra>として表現して下さい。 ここの部分の意味がわからなくて>< こういう風にcsvを作成して、これを読み込んでテンプレートxmlの中身を入れ替えて出力しろ、ってことなんだと思うのですが。だとしたら、どういう風にcsvを作るのかが分からなくて><お題を出した人が会社に顔を出さないので、聞くにきけない状態です>< こんなこと聞くのもおかしな話だとは重々承知しております>< どなたかこのお題の意味をわかる方いませんでしょうか? 宜しければ教えて頂けると助かります><

みんなの回答

  • eternalx
  • ベストアンサー率35% (7/20)
回答No.1

間違ってたらごめんなさいね。 たとえばCSVファイルに key,aaa,bbb,ccc とありますよね。 それをaaaからの2カラム目を(二個目を)extraとして表現してくださいっていう意味ではないのでしょうか。 <root>  <datas>   <key>key</key>   <value>key</key>   <extdatas>    <extra>aaaa</extra> <extra>bbbb</extra> <extra>cccc</extra>   </extdatas>  </datas> </root> こういうふうに展開されてほしいのでは?

burlroof
質問者

お礼

早速の回答本当にありがとうございます!! なるほど~!eternalxさんの説明を読んで改めてお題を読みなおしてみると 確かにそういう内容のような気がしますね^^ なんか頭のなかがスッキリした感じがします。本当にありがとうございました^^

関連するQ&A

  • IEのmsxmlでxmlをcsvに変換

    現在IEにくっついているmsxmlでxmlファイルをcsvに変換させるxslを作成しています。 msxmlでもmsxml3でも動くようなxslファイルを作成したいので ワーキングドラフト仕様のxslの記述を使用しようと思い下記のようなXMLとxslを作成しました <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="CSV.XSL"?> <root> <data> <record> <aaaa>1234</aaaa> <bbbb>5678</bbbb> <cccc>9abc</cccc> <dummy name="ENDRECORD"></dummy> </record> <record> <aaaa>1122</aaaa> <bbbb>3344</bbbb> <cccc>5566</cccc> <dummy name="ENDRECORD"></dummy> </record> </data> </root> xslのposition()が使えないので xmlに <dummy name="ENDRECORD"></dummy> を追加して xslで一件分のデータの終わりを認識させています -csv.xsl- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="root/data/record"/> </xsl:template> <xsl:template match="root/data/record"> <xsl:for-each select="*"> <xsl:choose> <xsl:when test="./@name[(.='ENDRECORD')]">&#xA;</xsl:when> <xsl:otherwise><xsl:value-of select="."/>,</xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet> しかし、csvのカンマ編集が以下のようになってしまいます。 1234,5678,9abc, ←最後にカンマが残ってしまう 1122,3344,5566, どなたかワーキングドラフト仕様でも勧告後の仕様でも動くような、csvに変換するxslを作成された方はいませんでしょうか。

    • ベストアンサー
    • XML
  • PostgreSQLのpsqlでユーザの扱いがうまくいかない

    こんにちは ただいま、PostgreSQL7.2.3をインストール(Redhat7.3)し、これからpsqlを使い、SQL操作をしようとしていたところですが、psqlと入力すると "psql: FATAL 1: Database "postgres" does not exist in the system catalog."となります。 PostgreSQLのユーザは "postgres","nobody"です。 現在、postgresからpostmaster -Sで起動しています. 下記に端末で行った作業内容をコピーしてみました。 今回インストールの参考にした書籍は"PHPxPostgreSQLで作る最強Webシステム」石井達夫著です。この本の手順に従ったつもりですが、うまくいきません。 [postgres@www root]$ postmaster -S [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ select dtname from php bash: syntax error near unexpected token `from' [postgres@www root]$ select dtname from template0 bash: syntax error near unexpected token `from' [postgres@www root]$ [postgres@www root]$ psql select dtname from php psql: warning: extra option from ignored psql: warning: extra option php ignored psql: FATAL 1: Database "select" does not exist in the system catalog. [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ psql psql: FATAL 1: Database "postgres" does not exist in the system catalog.

  • perlでCSVをソートする方法について

    perl初心者です。いつもありがとうございます。 perlでcsvファイル(1行のカラム数は200)、総行数は約3万行のファイルを37番目のカラム(-25以上25未満の数値データ)で降順ソートしその値によって行数がだいたい均等になるよう3分割し、2番目のカラムに文字でも数字でもよいのですがその4つのグループごとにフラグ(例えば1,2,3)を入れたいと思ってます。グループ化については境目の37番カラムの値は重複している場合が多いと思うのですがその場合は下(別に上でもかまいません)に入れるものとします。 ソートロジックは過去の質問を参照して理解しましたがグループ化しフラグを入れるルーチンがうまく作れません。下記のように作ったのですがこの先同じことを何度もやらなくてはならないので先に進めません。どなたかお助けください。最終的にやりたいことはカラム37でグループ化→カラム2にフラグを立てる、次にカラム2とカラム38(-25から0までの数値)でソートし同様に同じ行数になるようにグループ化→カラム3にフラグを立てる、さらにカラム2とカラム3とカラム39(-25以上25未満の数値データ)でソートし・・・同様に繰り返し最終的に1グループが100件(行)~150件(行)になるようにしたいのです。つまり約3万件のデータを3*4*2*4*2=192分割(5列の値で分類)したい、そしてどのような範囲で分割したかという情報も得たいのです。 use strict; use warnings; use utf8; use Encode; binmode STDOUT, ':encoding(utf-8)'; my $dir = './data'; # 処理するディレクトリ my $motoFile = 'customer.txt'; # もとファイル open my $fh, '<:encoding(cp932)', "$dir/$motoFile" or die 'ファイルが開けません。',"$!"; my %sorted; while (my $line = <$fh>) { my $key = (split /,/, $line)[37]; push @{$sorted{$key}}, $line; if (@{$sorted{$key}} == 1000) { open OUT, '>>:encoding(cp932)', "$dir/$key.tmp" or die "Can't open: $!"; print OUT @{$sorted{$key}}; close OUT; @{$sorted{$key}} = (); } } open OUT, '>:encoding(cp932)', "$dir/out.txt" or die "Can't open: $!"; foreach my $key (sort { $b <=> $a } keys %sorted) { if (-e "$key.tmp") { open IN, '<:encoding(cp932)', "$dir/$key.tmp" or die "Can't open: $!"; print OUT while <IN>; close IN; } print OUT @{$sorted{$key}} if @{$sorted{$key}}; } close OUT; #↓↓↓↓ここからフラグを作成するルーチン # 行数を調べ3つに分けるルーチン my @colum37; open IN, '<:encoding(cp932)', "$dir/out.txt" or die 'ファイルが開けません。',"$!"; my @in = <IN>; close IN; my $gyousuu = scalar(@in); my $amari = $gyousuu % 3; if ($amari == 0) { my $groupGyousuu = ($gyousuu-$amari)/3; print "総行数は$gyousuu","で、1グループの行数は$groupGyousuu","ほど、余りは$amari\n"; # あまりが0の時、group1は@inの0行 ~$groupGyousuu-1行まで #         group2は@inの$groupGyousuu行 ~$groupGyousuu*2-1行まで #         group3は@inの$groupGyousuu*2行~$groupGyousuu*3-1行まで foreach my $num (1..2) { push @colum37, (split /,/, $in[$groupGyousuu*$num])[37]; # これは境目の先頭の37番目 } print "@colum37\n"; #これでここまでは完成、分けるべき値がこの配列に入っている。 open OUT, '>:encoding(cp932)', "$dir/out.txt" or die "Can't open: $!"; foreach my $line (@in) { my @line = split /,/,$line; if ($line[37]>=$colum37[0]) { $line[1] = 1; }elsif ($line[37]>=$colum37[1] and $line[37]<$colum37[0]) { $line[1] = 2; }elsif ($line[37]<$colum37[1]) { $line[1] = 3; } $line = join (',',@line); print OUT $line; } close OUT; } elsif ($amari == 1) { この後未作成

    • ベストアンサー
    • Perl
  • ブログのテンプレート(XML→HTML?)

    海外のサイトでブログのテンプレートを検索して、 使いたい物を探しファイルをDLしたのですが、 ファイルの中身がxmlが1つとpsdが3つ入ってました。 ファイル元はこちらです。 (​http://bloggertemplates.itmag.org/2007/11/blogger-template-celebrit...​) 今自分が使っているブログにテンプレートのインポート機能があるようなのですが、 HTMLとCSSしかできないようです。 このXMLを使うにはどの様にしたら良いでしょうか? XML初心者ですので、質問の意味がちゃんと伝わっているか不安ですが、よろしくお願いします。 因みにブログは忍者ブログです。

    • ベストアンサー
    • XML
  • phpからxmlへの文字化け

    PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

    • 締切済み
    • PHP
  • XMLにおける同名異種のタグを区別して、そのコンテンツを取り出すには?

    XMLにおける同名異種のタグを区別して、そのコンテンツを取り出すには? <?xml version='1.0'?> <root>  <animal>   <neko>ペルシャ</neko>  </animal>  <pet>   <neko>三毛</neko>  </pet> </root> 上記コードから、 getElementByTagName('neko')のようにして、 <neko>タグの中身を取得したいのですが、 ただ、取得したいのは、<animal>の中にある<neko>の中身であって、 <pet>の中にある<neko>の中身ではないんです。 こういった場合、同じ<neko>でも区別して、中身を取得する方法はありますか? 方法としては、DOM的に取得したいと思っています。 つまり、正規表現で云々というのは、最終手段としたいわけです。 おそらく、初歩的な質問だとは思いますが、 どうか宜しくお願い致します。 環境:PHP5

    • ベストアンサー
    • PHP
  • ダウンロードの仕方

    こんばんは~。 教えてほしいことがあるんですけど…。 サーバー(TOMCAT+アパッチ)にあるファイルのダウンロードってどうやるんですか? たとえばXMLファイルの場合、ブラウザからアクションなげたとき、ダウンロードされずにブラウザにXMLファイルの中身がそのまま表示されちゃいますよね??? あとCSVだとブラウザの中にエクセル形式で表示されちゃうし…。 これがjavaファイルだと普通にダウンロードのダイアログ(保存とか開くとかキャンセルとか選べるやつ!)が出ますよね? どうやって実装すればXMLファイルからもしくはCSVファイルからのダウンロードってできるのでしょうか? 意味不明なところは補足しますので、宜しくお願いします!

    • ベストアンサー
    • Java
  • 限られた数の配列のみ表示させる

    配列の基本的なことを理解していないので、極めて初歩的な質問で申し訳ありませんが、ご教示お願い致します。 csvを読み込み、条件を満たすデータ(ここでは$row[1]がy)だけで配列を作ります。 $handle = fopen("sample.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {if($row[1]=="y"){ $data[] = array( $row[0] ,$row[1] ,$row[2] ,$row[3]); } } fclose($handle); すべての行のデータ(ここでは$row[2]のみ)は下記で表示されます。 foreach ($data as $key => $row) { print $row[2]."<BR>"."\n"; 最初から例えば4行目までのみ表示したい場合 for($i=0;$i<4;$i++){ print $data[$i]."<BR>"."\n"; } 上記では、arreyの文字が4個しか表示されませんが、先の例のように各行の$row[2]を表示させるには、どのようにすればよいのでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • XML初心者です。

    いつもお世話になっております。 下記のPHPを解析中なのですが、さっぱり分かりません。 「何をしているか(どんな動きをしているか)」をどなたか解説していただけませんでしょうか。 よろしくお願い致します。 ----------------------------------- <?php class EditableGrid { (略) public function addColumn(・・・(略)・・・) { $this->columns[$name] = array(・・・(略)・・・); } private function _getRowField($row, $field) { return is_array($row) ? (isset($row[$field]) ? $row[$field] : '') : (isset($row->$field) ? $row->$field : ''); } public function getXML((・・・(略)・・・)); { $xml = '<?xml version="1.0" encoding="'. $this->encoding . '" ?>'; $xml.= "<table><metadata>\n"; foreach ($this->columns as $name => $info) { $label = self::escapeXML($info['label']); $xml.= "<column name='$name' label='$label' datatype='{$info['type']}'". ($info['bar'] ? "" : " bar='false'") . " editable='". ($info['editable'] ? "true" : "false") . "'>\n"; if (is_array($info['values'])) { $xml.= "<values>\n"; foreach ($info['values'] as $key => $value) $xml.= "<value value='{$key}'><![CDATA[{$value}]]></value>\n"; $xml.= "</values>\n"; } $xml.= "</column>\n"; } $xml.= "</metadata><data>\n"; $fetchMethod = method_exists($rows, 'fetch') ? 'fetch' : (method_exists($rows, 'fetch_assoc') ? 'fetch_assoc' : NULL); if (!$fetchMethod) foreach ($rows as $row) $xml.= $this->getRowXML($row, $customRowAttributes, $encodeCustomAttributes); else while ($row = call_user_func(array($rows, $fetchMethod))) $xml.= $this->getRowXML($row, $customRowAttributes, $encodeCustomAttributes); $xml.= "</data></table>\n"; return $xml; } ----------以下まだ続くのですが省略します-------- private function getRowXML  ・  ・ (略)  ・  ・ public function renderXML  ・  ・ (略)  ・  ・ } 以上

    • ベストアンサー
    • PHP
  • XMLをxalanでXSL-FOに変換する

    book.xmlとbook.xslでbook.foに変換にxalanで実行しました。 >java org.apache.xalan.xslt.Process -in book.xml -xsl book.xsl -out book.fo ところが、以下のようにエラーが出ました。 Exception in thread "main" java.lang.ClassCastException: org.apache.xalan.res.XSLTErrorResources_ja at org.apache.xalan.xslt.Process.main(Process.java:209) 何が原因なのでしょうか?xalan-j_2_4_1のxalan.jarとxercesImpl.jarにはCLASSPATH設定をしています。 <book.xml> <?xml version="1.0" encoding="Shift_JIS" ?> <?xml:stylesheet type="text/xsl" href="book.xsl" ?> <書籍管理> <書籍情報 ID="1"> <書籍名>スタイルシート辞典 第2版</書籍名> <著者>安川英明</著者> <出版社>翔泳社</出版社> <価格>1800</価格> </書籍情報> ・・・ <書籍管理> 文字数が多くなってすべてbook.xslがかけませんでした。 テーブル形式で表示するようしたいのです。 <xsl:template match="書籍管理"><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> ・・・ <fo:table> <fo:table-column column-width="50mm"/> ・・・ <fo:table-body><fo:table-row><fo:table-cell><fo:block>書籍名</fo:block></fo:table-cell>・・・</fo:table-row> <xsl:apply-templates/> </fo:table-body> </fo:table> </fo:flow></fo:page-sequence> </fo:root></xsl:template> <xsl:template match="書籍情報"> <fo:table-row><xsl:apply-templates/></fo:table-row> </xsl:template> <xsl:template match="書籍名"> <fo:table-cell><fo:block><xsl:value-of select='.'/></fo:block></fo:table-cell> </xsl:template>

    • ベストアンサー
    • XML