質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1560閲覧

C#です。if文、HTMLの間違いがわかりません。

pro-poke5

総合スコア46

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/08/10 01:42

編集2016/09/02 07:52

プログラミング初心者です。
VS2010でHTMLファイルに出力するC#でプログラミングをかいています。
ですが希望の表にならず、また何が違うのかわからないです。
現在下のコードを実行するとこのようになります。

これを色の~市の縦の行の空欄をなくし、横にはみ出てしまっている記号を同じ市の行に1列に収めたいです。
if文がおかしいのか。HTMLの書き方がおかしいのか、アドバイスお願いします。

C#

1コード 2 sw.Write("<table border=1>"); 3 sw.Write("<tr><td> </td><td>暴風雪</td><td>大雨</td><td>暴風</td><td>大雪</td><td>波浪</td><td>高潮</td><td>洪水</td><td>雷</td><td>融雪</td>"); 4 sw.Write("<td>濃霧</td><td>乾燥</td><td>なだれ</td><td>低温</td><td>霧</td><td>着雪</td><td>着氷</td></tr>");//表のヘッダー 5 6//ここにforeach,seitch文がはいりboufuusetsuやooameに記号が入る処理があります 7//下のif文はforeachの中です。 8 9 if (code == oldCode) 10 { 11 12 sw.Write("<td>"+ boufuusetsu +"</td>"); 13 sw.Write("<td>" + ooame + "</td>"); 14 sw.Write("<td>" + bouhuu + "</td>"); 15 sw.Write("<td>" + ooyuki + "</td>"); 16 sw.Write("<td>" + haro + "</td>"); 17 sw.Write("<td>" + takashio + "</td>"); 18 sw.Write("<td>" + kouzui + "</td>"); 19 sw.Write("<td>" + kaminari + "</td>"); 20 sw.Write("<td>" + yuusetsu + "</td>"); 21 sw.Write("<td>" + noumu + "</td>"); 22 sw.Write("<td>" + kanso + "</td>"); 23 sw.Write("<td>" + nadare + "</td>"); 24 sw.Write("<td>" + teion + "</td>"); 25 sw.Write("<td>" + shimo + "</td>"); 26 sw.Write("<td>" + chakuhyo + "</td>"); 27 sw.Write("<td>" + chakusetsu + "</td>"); 28 29 oldCode = code; 30 31 } 32 else 33 { 34 sw.Write("<tr><td>" + name +"</td><td>"+ boufuusetsu +"</td>"); 35 sw.Write("<td>" + ooame + "</td>"); 36 sw.Write("<td>" + bouhuu + "</td>"); 37 sw.Write("<td>" + ooyuki + "</td>"); 38 sw.Write("<td>" + haro + "</td>"); 39 sw.Write("<td>" + takashio + "</td>"); 40 sw.Write("<td>" + kouzui + "</td>"); 41 sw.Write("<td>" + kaminari + "</td>"); 42 sw.Write("<td>" + yuusetsu + "</td>"); 43 sw.Write("<td>" + noumu + "</td>"); 44 sw.Write("<td>" + kanso + "</td>"); 45 sw.Write("<td>" + nadare + "</td>"); 46 sw.Write("<td>" + teion + "</td>"); 47 sw.Write("<td>" + shimo + "</td>"); 48 sw.Write("<td>" + chakuhyo + "</td>"); 49 sw.Write("<td>" + chakusetsu + "</td></tr>"); 50 //oldCode = code; 51 } 52 oldCode = code; 53 } 54 sw.Write("</table>");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

市が空白の行は上の行の市の行に合わせこんで出したいのでしょうか?
HTMLに吐き出す処理より前に
市ごとに(一行ごとのデータ)を作りこんでから、
HTMLに書き出してはどうでしょうか?

投稿2016/08/10 02:22

KIYOSHI

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro-poke5

2016/08/10 02:32

ありがとうございます はい、市が空白の行は上の行に1列に表示させたいです。 データを作りこむということは、新しくtablenameなどの変数を作るということでしょうか?
KIYOSHI

2016/08/10 04:27

変数名を書かれても全体の作りがわからないのでtablenameが何なのかわかりませんが。 HTMLを作る際に、一度吐き出した行に書き込むことはできませんので、 一行ごとに、市ごとに複数データ行を取得しているということであれば、 市ごとに各データをまとめるといいのではないのでしょうか。
pro-poke5

2016/08/10 07:03

ありがとうございます 一度出した行に書きこむことができないのですね 市ごとにまとめるというのはif文の中で処理すべきでしょうか? それともif文の前でやるべきなのでしょうか?
KIYOSHI

2016/08/10 07:30

書き出すデータをForかForeachでループさせて書き出していると思います。 その前に、一度ループさせて一行ごとのデータを作成するといいと思います。
guest

0

ベストアンサー

HTMLは、タグが「入れ子」構造になります。

表(2行2列)の場合のHTMLは以下のようになります。

HTML

1<Table><!-- 表の始まり --> 2 <Tr><!-- 1行目の始まり --> 3 <td> <!-- 1項目目の始まり --> 4 1行目の1項目の内容 5 </td><!-- 1項目目の終わり --> 6 <td> <!-- 2項目目の始まり --> 7 1行目の2項目目の内容 8 </td><!-- 2項目目の終わり --> 9 </Tr><!-- 1行目の終わり --> 10 <Tr><!-- 2行目の始まり --> 11 <td> <!-- 1項目目の始まり --> 12 2行目の1項目の内容 13 </td><!-- 1項目目の終わり --> 14 <td> <!-- 2項目目の始まり --> 15 2行目の2項目目の内容 16 </td><!-- 2項目目の終わり --> 17 </Tr><!-- 2行目の終わり --> 18</Table><!-- 表の終わり -->

これを理解した上で、質問のコードを見てみると以下の問題があることが判ると思います。

1)Tableタグの後ろの">"が抜けている。
2)ifのブロックの中のコードでは、<Tr>,</Tr>のタグが出力されていない。(elseのブロックの中のコードでは、<Tr>,</Tr>が出力されていて、こちらは正しい)
3)ifのブロックの中のコードでは、項目(<Td>から</td>まで)が16個出力されているが、elseのブロックの中のコードでは項目が17個出力されている。 ifのブロックの中のコードで「~市」に相当する項目(name)を出力し忘れているのではないか。

1列目(~市)が空欄になっているのは、3)が原因。
横にはみ出すのは、2)が原因。(行になっていないので、改行が起きず、後ろに伸びてゆく)
だと思います。

投稿2016/08/10 02:19

編集2016/08/10 02:22
coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro-poke5

2016/08/10 02:29

ありがとうございます oldCodeとcodeが同じなら同じ行に表示したかったのでnameは出力しないほうがいいと考えました またifで<tr></tr>、nameを追加するとelse文と同じ内容・・・ということでしょうか?
coco_bauer

2016/08/10 03:28

「oldCodeとcodeが同じなら同じ行に表示したかった」というのが、複数のデータを重ね合わせたような行を作りたかったという事なのであれば、複数のデータが区別できるようになっていなければなりませんが、質問のコードは、そうなっていません。大雨の情報として、ooameひとつではなく、ooameOld, ooameNewがあって、これらを一つにまとめたものを出力するというのなら、1行にまとめるという事が可能になろうかと思われます。
guest

0

<table border=1 の閉じ括弧がないのは単純なミスでしょうか?

また、code == oldCodeの場合に<tr>がないように見受けられます。

生成されたHTMLのソースを見てみると結構わかりやすいかもしれません。
http://openlab.ring.gr.jp/k16/htmllint/htmllintl.html
のようなチェッカーもありますので利用してみてはいかがでしょうか~。

投稿2016/08/10 02:00

編集2016/08/10 02:03
s.t.

総合スコア2021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro-poke5

2016/08/10 02:08

閉じカッコがないのは単純なコピペミスです、すみません code == old Codeの場合に<tr>をつけると 横にはみ出るのはなくなりますが 縦の市の列に空欄ができ、 ------------ヘッダー----------- A市   △     ×          ○                      ○ B市 … となってしまいまして… 1行にすることはできないのでしょうか?
s.t.

2016/08/10 02:30

code == oldCodeの場合にカラムの数が1個足りていないのではないでしょうか? ヘッダが17列であるのに対してcode == oldCodeの列は16列しかありません。
s.t.

2016/08/10 02:35

あと、個人的主観ですが、他言語からHTMLソースを生成する際は、 HTMLが見やすくなるソースコードにしたほうがよいかもしれません。 データ部のほうはできているので、ヘッダのほうもあわせてあげると見やすくなりますよ。 例えば、 sw.Write("<tr>"); sw.Write("<td> </td>"); sw.Write("<td>暴風雪</td>"); sw.Write("<td>大雨</td>"); ・・・ sw.Write("</tr>"); のような感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問