🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

Q&A

解決済

1回答

826閲覧

パースした情報を上手くCSVに反映出来ない。

mori_1228

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

0グッド

0クリップ

投稿2019/11/13 10:20

あるサイトから漫画のあらすじを抽出して、CSVに出力しようとしてます。

C#

1//TOPページ 2 for (int i = 0; i < 5; i++) 3 { 4 string pageno = ""; 5 if (i > 0) 6 { 7 pageno = i.ToString() + "01.html"; 8 } 9 var document = Scrape(@"https://sakuhindb.com/manga-ranking/" + pageno); 10 11 12 string[] manga_url = document.GetElementsByClassName("width_100per table") 13 .Select(table => table.GetElementsByTagName("a")[0].GetAttribute("href")) 14 .ToArray(); 15 16 string[] name = document.GetElementsByClassName("width_100per table") 17 .Select(e => e.GetElementsByClassName("like_link").Last().TextContent) 18 .ToArray(); 19 20 string[][] tag = document.GetElementsByClassName("width_100per table") 21 .Select(e => 22 { 23 if (e.GetElementsByClassName("attr_icon").Length > 0) 24 { 25 return e.GetElementsByClassName("attr_icon")[0].ChildNodes.Select(li => li.TextContent).ToArray(); 26 } 27 else 28 { 29 return new string[] { }; 30 } 31 }) 32 .ToArray(); 33 34 string[] hyouka = document.GetElementsByClassName("width_100per table") 35 .Select(e => e.GetElementsByClassName("like_table_list").First().ChildNodes[0].TextContent) 36 .ToArray(); 37 38 39 string[] ave = document.GetElementsByClassName("width_100per table") 40 .Select(e => e.GetElementsByClassName("like_table_list").First().ChildNodes[1].TextContent) 41 .ToArray(); 42 43 44 System.Text.Encoding enc = System.Text.Encoding.GetEncoding("sjis"); 45 46 47 var filePath = @"name_" + i + ".csv"; 48 using (StreamWriter writer = new StreamWriter(filePath, false, enc)) 49 { 50 for (int a = 0; a < manga_url.Length; a++) 51 { 52 writer.WriteLine(name[a]); 53 } 54 } 55 56 var filePath2 = @"tag_" + i + ".csv"; 57 using (StreamWriter writer = new StreamWriter(filePath2, false, enc)) 58 { 59 for (int b = 0; b < manga_url.Length; b++) 60 { 61 writer.WriteLine(String.Join("/",tag[b])); 62 } 63 } 64 65 var filePath3 = @"hyouka_" + i + ".csv"; 66 using (StreamWriter writer = new StreamWriter(filePath3, false, enc)) 67 { 68 for (int c = 0; c < manga_url.Length; c++) 69 { 70 writer.WriteLine(hyouka[c]); 71 } 72 } 73 74 var filePath4 = @"ave_" + i + ".csv"; 75 using (StreamWriter writer = new StreamWriter(filePath4, false, enc)) 76 { 77 for (int d = 0; d < manga_url.Length; d++) 78 { 79 writer.WriteLine(ave[d]); 80 } 81 } 82 83 84 85 86 //作品ページ 87 88 for (int j = 0; j < manga_url.Length; j++) 89 { 90 var document2 = Scrape(@"https://sakuhindb.com" + manga_url[j]); 91 92 string arasuzi = document2.GetElementsByClassName("info_box table")[0] 93 .Children[0].Children[2].GetElementsByTagName("span")[0].TextContent; 94 95 96 string tyosya = document2.GetElementsByClassName("info_box table")[0] 97 .Children[0].Children[3].TextContent; 98 99 100 101 var filePath01 = @"arasuzi_" + i + "_" + j + ".csv"; 102 using (StreamWriter writer = new StreamWriter(filePath01, false, enc)) 103 { 104 105 for (int e= 0; e < manga_url.Length; e++) 106 { 107 writer.WriteLine(arasuzi[e]); 108 } 109 110 } 111

arasuzi0_0.csvからarasuzi0_100.csvまで出力される予定なのですが、arasuzi0_0と0_1までしか出力されません。

writer.WriteLine(arasuzi[e]);にSystem.IndexOutOfRangeException文が出るのですが、何が原因でしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

IndexOutOfRangeExceptionですから、eの値がarasuziの要素数より大きくなっていると思われます。
デバッガで値を確認してみてください。

投稿2019/11/13 10:47

YAmaGNZ

総合スコア10469

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

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

mori_1228

2019/11/13 10:53

ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問