最初のResponse.Writeがエラー

タグの編集
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 13:45:03
以下で、最初のResponse.Write文がエラーになります。何か足りないのでしょうか?
 Dim encode As System.Text.Encoding
 Dim td2 As String
 td2 = "M_Test.CSV"
 encode = System.Text.Encoding.GetEncoding("Shift-JIS")  '文字コードにShiftJISを指定。(UTF8の場合は指定不要)
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(td2))
Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis")
Response.ContentType = "text/csv"

Response.Write("Death Data")  <-ここで、System.IndexOutOfRangeException: 'インデックスが配列の境界外です。'となります。
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 14:46:17
Dim td2 As String
        td2 = "M_Test.CSV"
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(td2))
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis")
        Response.ContentType = "text/csv"
        Response.Write("Death Data")
        Response.End()
でうまくいきますね。なんだろう。
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 14:48:15
ファイル名がおかしいのではと思います。解決にします。
投稿者 るきお  (社会人) 投稿日時 2020/5/30 14:49:20
このプログラムで試したところ特にエラーにはなりませんでした。
エラーになるプログラムの全体を教えていただけますか?

Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load

        Dim encode As System.Text.Encoding
        Dim td2 As String
        td2 = "M_Test.CSV"
        encode = System.Text.Encoding.GetEncoding("Shift-JIS")  '文字コードにShiftJISを指定。(UTF8の場合は指定不要) 
        Response.AppendHeader("Content-Disposition""attachment; filename=" + Server.UrlEncode(td2))
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis")
        Response.ContentType = "text/csv"
        Response.Write("Death Data")

    End Sub
End Class
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 15:26:49
単純な、プログラムでは、動きます。
response.close()はいらないみたいで、・・
今回は、この単純なプログラムの前に、クラスを使っています。・・
だけど、それだけで
Dim td2 As String
td2 = "MXXX_Test.CSV"
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(td2))
 Respon・・・
のtd2 = "MXXX_Test.CSV"で黄色くなって、ユーザーが処理していない例外,System.IndexOutOfRangeException: 'インデックスが配列の境界外です。'
です。例外例を記入してないからでしょうか?
throw exceptionなどとか・・
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 15:58:24
Dim tdx As String = ""
 tdx = "MXXX_Test.csv"
では1行目のDim tdx As String = ""が黄色くなり、tdxのところへカーソルを持っていくとnothingですが・・単純にプログラムミスでした。この前のところで、宣言した配列以上の記述をしていました。ここの箇所が、黄色くなってくれれば、いいものを、其の後の、エラー出ない箇所へ黄色くなるんです。
投稿者 るきお  (社会人) 投稿日時 2020/5/30 16:40:03
コピー&貼り付けでエラーが再現できるプログラムを貼り付けていただければ何かわかるかもしれません。
書いていないことを推測してエラーの原因を探すのは難しいです。
投稿者 るきお  (社会人) 投稿日時 2020/5/30 16:40:05
コピー&貼り付けでエラーが再現できるプログラムを貼り付けていただければ何かわかるかもしれません。
書いていないことを推測してエラーの原因を探すのは難しいです。
投稿者 kojiro  (社会人) 投稿日時 2020/5/30 20:51:19
Dim aged(19) As String
        aged(20) = "合計"
        Dim td2 As String
        td2 = "M5_Test.CSV"
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(td2))
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis")
        Response.ContentType = "text/csv"
        Response.Write("Death Data")
        Response.Write(",")
        Response.Write("Death Data")
        Response.Write(",")
        Response.Write("Death Data")
        Response.Write(vbCrLf)
        ’Response.Close()
        Response.End()
です。
投稿者 るきお  (社会人) 投稿日時 2020/5/30 23:34:07
興味深いですね。情報提供ありがとうございます。



このエラーの原因は aged(20) = "合計" です。 aged は (19) で宣言されているので、 aged(20) を使用すると IndexOutOfRangeException になります。

そのため、本来は aged(20) = "合計" の行が黄色くなって実行が停止されるべきですが、Visual Studioはエラーになっている行を間違えて黄色くしてしまっているみたいです。
Visual Studioも間違えることがあるんです。

この画像はVisual Studio 2019 バージョン 16.6 で実行して採取しました。Visual Studio 2017でも同じでした。
投稿者 るきお  (社会人) 投稿日時 2020/5/30 23:49:48
マイクロソフトに報告しておきました。
どうなるかな・・・。

https://developercommunity.visualstudio.com/content/problem/1057333/debugger-shows-wrong-line.html
投稿者 koijro  (社会人) 投稿日時 2020/5/31 09:44:11
ありがとうございます。
エラーの部分で、正しく黄色くなってほしいです。
投稿者 葉月  (社会人) 投稿日時 2020/5/31 12:01:05
少し興味があったので、C#で試したら同じ現象が起きました。
同じ.NET言語なので同じ結果になりますね。
string[] strs = new string[5];
strs[6] = "abc";
Console.WriteLine("test"); // ここで例外が発生

VSで動かしているPython試したら、正しい場所で例外が起きています。
(Python3.8をインストールしています。こちらも想定通りです)
import array as arr

nums = arr.array("i", [0, 1, 2, 3, 4])
print(nums[0])
nums[5] = 5 #正しく指摘
print(nums[4])