無事ビルドするには?

解決


うい  2005-09-24 21:59:01  No: 125704  IP: [192.*.*.*]

環境はVB.net  2003です。
http://www.gotdotnet.com/japan/student/column/firststep/firststep19.aspx
のサイトに載っているC#をVBに書き直しています。
自分なりに直したつもりですが、
最後のほうで
Option  Strict  OnでStringからDoubleへの暗黙的な変換はできません
というエラーがでてビルドができません。
本人はstringからstringへの書き込みをしてるつもりなんですがエラーが
でるので無事ビルドするにはどこを直したいいか教えていただけませんか。
どこが悪いのかわからないので全ソース載せること失礼かと思いますが
よろしくお願いします。


Option Strict On

Imports System.Net
Imports System.Text.RegularExpressions
Imports System.Text
Imports System.IO


Private Sub downButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles downButton.Click
        Try
            Dim downloadurl As String = urlText.Text
            Dim filepath As String = filePathText.Text
            Dim downloaddirurl As String = downloadurl.Substring(0, downloaddirurl.LastIndexOf("/") + 1)

            Dim webClient As WebClient = New WebClient
            webClient.DownloadFile(downloadurl, "c:\\temp.html")

            'c:\\temp.htmlの内容をcontentsに格納
            Dim reader As StreamReader = File.OpenText("c:\\temp.html")
            Dim contents As String = reader.ReadToEnd()
            reader.Close()

            'contentsからリンク情報のリストを抽出
            Dim regex As Regex = New Regex("<a +href=('|"")[^('|"")]*('|"")*>")
            Dim matchcollection As MatchCollection = Regex.Matches(contents)


            '各リンク情報からURLを抽出し、ダウンロードする
            Dim i As Integer
            For i = 0 To matchcollection.Count
                Dim urlregex As Regex = New Regex("('|"")[^('|"")]*('|"")")
                Dim match As Match = urlregex.Match(matchcollection(i).Value)
                Dim url As String = match.Value.Substring(1, match.Value.Length - 2)

                If url.IndexOf("http://") <> 0 Then
                    url = downloaddirurl + url

                    '抽出されたリンク情報をテキストボックスに表示
                    urlListText.Text += url + "vbCrLf"

                    'ファイル名を取得
                    Dim filenamestart As Integer = url.LastIndexOf("/") + 1
                    Dim filenamelength As Integer = url.Length - filenamestart
                    Dim filename As String = url.Substring(filenamestart, filenamelength)

’**************
   'ダウンロード先ファイルパスを作成
  Dim downloadpath As String = filepath + "\\" + "down"+filenamestart
’エラー発生箇所
’***************

                    Try
                        webClient.DownloadFile(url, downloadpath)
                    Catch ex As Exception

                    End Try
                End If
            Next

        Catch ex As Exception

        End Try

    End Sub

編集 削除
あん  2005-09-24 23:09:57  No: 125705  IP: [192.*.*.*]

filenamestart

Integer
だからですね

編集 削除
うい  2005-09-25 00:07:03  No: 125706  IP: [192.*.*.*]

レスありがとうございます。
前の文字ばっかり気をとられて一番後ろの文字に注意が要ってませんでした。
文字列の連結は+でなく&のようなんで
Dim downloadpath As String = filepath & "\\" & "down"
に直したところ、ビルドはできたんですが動きませんでした。
よろしくお願いします。

編集 削除
うい  2005-09-25 00:07:28  No: 125707  IP: [192.*.*.*]

すいません。解決してません

編集 削除
Blue  2005-09-25 00:52:02  No: 125708  IP: [192.*.*.*]

> webClient.DownloadFile(downloadurl, "c:\\temp.html")
> Dim downloadpath As String = filepath & "\\" & "down"
VB.NETって\はエスケープしないといけないのでしたっけ?

編集 削除
Dental  2005-09-25 00:52:50  No: 125709  IP: [192.*.*.*]

…ところで、何で \ マークを2つ重ねてるの?

編集 削除
Dental  2005-09-25 00:56:28  No: 125710  IP: [192.*.*.*]

被った。orz

VB.NETでは、「\」を重ねる必要はないです。
「"」を埋め込むなら、「""」と重ねる必要があるけど。

編集 削除
Blue  2005-09-25 01:52:05  No: 125711  IP: [192.*.*.*]

> C#をVBに書き直しています。
とありましたね。前回の質問のときも、
エスケープを間違えていましたね。
C# → VB  にする上でどんな違いがあるのかを明確にしたほうが良いでしょう。

編集 削除
うい  2005-09-25 03:50:17  No: 125712  IP: [192.*.*.*]

レスありがとうございます。
「¥」については言い訳になるんですけど、(おそらく)つけなくても大丈夫だろうとはおもったんですが、あってもファイル名が\tempになるだけで問題ないと思ってました。
今やってみるとファイル名に¥は使えませんと出ました。
試してみずに思い込んでました。
ありがとうございます。

編集 削除
我龍院忠太  2005-09-25 18:12:40  No: 125713  IP: [192.*.*.*]

>Dim downloaddirurl As String = downloadurl.Substring(0, downloaddirurl.LastIndexOf("/") + 1)

Dim downloaddirurl As String = downloadurl.Substring(0, downloadurl.LastIndexOf("/") + 1)
でしょう。

>If url.IndexOf("http://") <> 0 Then
>       url = downloaddirurl + url
>・
>End If

If url.IndexOf("http://") <> 0 Then
       url = downloaddirurl + url
End If
でしょう、C#のIfはすぐしたの行のみ。

#これでそれらしきファイルは吐き出すが完全ではない。
C#のもとのコードも何かおかしそうです。
>String filename = url.Substring(filenamestart, filenamelength);]
この filenameなんかどこにも使ってないし。
それと全体をTryで囲んで構文エラーまで例外を投げるような、Tryの使い方は推奨できないでしょう。

編集 削除
うい  2005-09-26 22:41:37  No: 125714  IP: [192.*.*.*]

レスありがとうございます。
おかげさまで動きました!!
URLリストが出たときはマジで感動です!!
初心者の質問ばかりしてしまいましたが無事解決できました。

>String filename = url.Substring(filenamestart, filenamelength);]
いわれてみると使われてないですね・・。
偉い先生の書いたソースだからと鵜呑みにせずにドンドンいろんなコードを読み書きして勉強していきたいと思います。
ありがとうございました。

編集 削除