2008年11月21日

ファイル名に使えない文字を見つける

テキストボックスからなど文字を入力してもらい

それを(フォルダ)ディレクトリ名とかファイル名に用いる場合がある

ファイル名やフォルダ名には使えない文字がある
たとえば

: // ? | などはファイル名に使えない

これらはいちいちチェックすることは大変に面倒くさいことである


あるんだなあそんな関数が!

Path.GetInvalidFileNameChars()
に配列で、ファイル名に使えない文字が入っている

凄い

ということで

テキストを入力すると
使えない文字を返すというべたなFunction

最初に見つかった使えない文字を返します

  Public FunctionNotFileName(ByVal InputText As String) As String

        Dim invalidch As Char() = Path.GetInvalidFileNameChars()
        Dim ReturnText As String = ""
        For Each c As Char In invalidch

            If InStr(InputText, c) > 0 Then
                ReturnText = c
                Exit For
            End If

        Next
        Return ReturnText

    End Function
ラベル:ファイル名 文字
posted by kiyo at 20:54| VB2008の文字変換 | このブログの読者になる | 更新情報をチェックする

2008年11月14日

メールをBasp21で簡単に送信

Basp21という
http://www.hi-ho.ne.jp/babaq/basp21.html からダウンロードできるDLLがあります


これをパソコンにインストールすると


メールを送ったり、FTPのアップロードなんかも

むちゃくちゃ簡単にできます。



以下は、Sendmail before pop に対応して

一度

メールサーバーにログインをかましています。


それから、いまどきのプロバイダのメールように、587のポートで送信しています。

エラーがあればERRにはいります


       Dim objBsp As Object


        objBsp = CreateObject("Basp21")


        Dim Err As String


        'MailServerにログイン
        objBsp.RcvMail(MailServer, MailUser, MailPass, "STAT", Dirname)

        Sleep(500)


        'メールを送ってエラーがあると、ERRに番号を入れます
        'これは587でメール送信しています
        Err = objBsp.SendMail(MailServer & ":587", MailTo, MailFrom, MailTitle, MailBody, FileName)

        Return Err

ラベル:ftp メール Basp21
posted by kiyo at 20:01| メール | このブログの読者になる | 更新情報をチェックする

2008年11月13日

文字列を変換してみる

文字を変換、置換してみたい

たとえば

今日は晴れでした。気分がよかった

という文章を

ホームページに使うために

<p>今日は晴れでした。</p>
<p>気分がよかった</p>

というようにVB2008で置換するための関数です。

PTag("今日は晴れでした。気分がよかった")

と使うと、上記のように変換してくれます


Public Function PTag(ByVal Desc As String) As String
Dim OUT As String

OUT = Replace(Desc, "。", "。

")
OUT = "

" & OUT & "
"
OUT = Replace(OUT, "  
", "")
Return OUT
End Function

簡単で応用がいろいろ利くと思いますので
もっと上手な方法もあるかと思うのですが

簡単で、あとから見ても分かりやすいと。。。

難しいのはわからないだけですが。

ではまた
ラベル:文字列 変換 置換
posted by kiyo at 20:47| VB2008の文字変換 | このブログの読者になる | 更新情報をチェックする

2008年11月12日

VBでMT(Movable type)に自動でログイン

MTに自動でログインするためのプログラムです。


MTはクッキーが効くのでその有効範囲内なら、ログインを自動的にしますが
しかし


クッキーが切れていたときは自分でユーザー名とパスワードを入れてログインします

それを自動でしてくれる部分です。


        'IEを開く Internet Explorerを起動します
        Dim objIE as Object
        objIE = CreateObject("InternetExplorer.application")
        objIE.visible = True

        'URLにMTのURLを入れます。
        Dim URL = "http://MyMT.com/mt/mt.cgi"

        '指定したMTのURLにアクセスします
        objIE.Navigate(URL)

        Do While objIE.Busy
            DoEvents()
        Loop

        Do While (objIE.document.readyState <> "complete")
            DoEvents()
        Loop

        Do While objIE.readyState <> "4"
            DoEvents()
        Loop

        Sleep(1000)


        'objDocument にIEの開いたページを指定します
        objDocument = objIE.Document
        HTML = objDocument.documentelement.innertext


        'もし、Movable Typeからログアウトしました という文字があったら、ログインするためにパスワードと、ユーザー名を入力して、チェックボックスも恩にします
        If InStr(HTML, "Movable Typeからログアウトしました") > 0 Or InStr(HTML, "サインイン") Then
            objForm = objDocument.Forms(0)
            objForm.UserName.Value = "MTUserName"
            objForm.Password.Value = "MTPassWord"

            objForm = objDocument.Forms(0).elements("remember")
            objForm.Checked = True

            objForm = objDocument.Forms(0)
            objForm.submit()

            MT.WaitIE(objIE)
        End If

ラベル:Movable Type MT
posted by kiyo at 19:06| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月11日

URLからページを取得してHTMLタグを解析

前回作った、YahooTitleSearchにキーワードを入れて
そこから

キーワードが入ったタイトルのページは何ページインデックスされているか
返す


関数です

長いですが
できは??


ちゃんと値が取れれば値を返して

うまく取得できなかったら
-1
を返します


Internet Explorerは使ってなかたです
使った例はまた書きますね

Public Function YahooTitleSearch(ByVal Keyword As String) As Long
        'Yahoo Web 検索からキーワードにintitle:で検索 0は正常 -10 はHTML処理かYahooのエラー -1 はhttp取得エラー
        Dim URL As String = YahooAPI.URLTitleSearchURL(Keyword)
        Dim client As New WebClient
        Dim HTML As String
        Dim Count As Long
        Dim Word As String
        Dim HTMLCount As Integer
        Dim AllHTMLCount As Long


        Try
            'HTTP Server からストリームを取得
            URL = YahooAPI.URLTitleSearchURL(Keyword)


            Dim wc As WebClient = New WebClient()

            Dim st As Stream = wc.OpenRead(URL)

            Dim enc As Encoding = Encoding.GetEncoding("EUC-JP")
            Dim sr As StreamReader = New StreamReader(st, enc)
            HTML = sr.ReadToEnd()
            sr.Close()

            st.Close()
            'Return HTML

            Word = "</strong>件目 / 約<strong>"
            HTMLCount = InStr(HTML, Word)
            AllHTMLCount = Len(HTML)

            '取得したHTMLの処理
            If InStr(HTML, "次の条件に一致する情報は見つかりませんでした。") > 0 Then
                Count = 0
            ElseIf HTMLCount > 0 Then

                '検索結果の例
                '</strong>件目 / 約<strong>267,000</strong>件
                '</strong>件目 / 約<strong>の右側の文字をHTMLにセット

                HTML = HTML.Replace(Left(HTML, HTMLCount - 1), "")
                HTML = HTML.Replace("</strong>件目 / 約<strong>", "")

                '</strong>件 の左側の文字を取得
                Word = "</strong>件"
                HTMLCount = InStr(HTML, Word)
                HTML = Left(HTML, HTMLCount - 1)

                '267,000 の,を消す
                HTML.Replace(",", "")
                Count = CLng(HTML)
            Else
                Count = -10
            End If

        Catch ex As Exception
            Count = -1
        End Try

        Return Count
    End Function

ラベル:HTML
posted by kiyo at 18:25| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月10日

IEでアクセスするURLを作る

Internet Explorer(IE)をVBから動かすために最初にURLを作る必要がある。


ここでは、YahooでKeywordをいれて

そのKeywordがタイトルに含まれているページがどのくらいあるか
測定してみるということをしてみたい。

 
「ほしのあき」で調べたら


「ほしのあきの水着」とか


「大好きほしのあき」


などというページがどのくらいあるか調べるために


YahooのURLを作成しよう


"http://search.yahoo.co.jp/search?p=" & Keyword & "&ei=UTF-8"


とURLEncodeしたKeywordをいれて


あとは


文字コードはFTF-8だよ


といってあげるだけでよい


  Public Function URLTitleSearchURL(ByVal Keyword As String) As String


        'Yahoo web search からintitle: で検索する

        Dim APIID As String = "YahooAPIID"

        Dim YahooWebURL As String
        Keyword = Trim(Keyword)

        'intitle:ほしのあき とすることで、ほしのあきをタイトルに持つページがでてくる
        Keyword = "intitle:" & Keyword
        Keyword = Keyword.Replace(" ", " ") '全角スペースを半角にする
        Keyword = Keyword.Replace(" ", " intitle:")
        Keyword = System.Web.HttpUtility.UrlEncode(Keyword)
        YahooWebURL = "http://search.yahoo.co.jp/search?p=" & Keyword & "&ei=UTF-8"

        Return YahooWebURL
    End Function

ラベル:Internet Explorer IE URL
posted by kiyo at 20:20| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月09日

VBからIEを立ち上げる

Internet Explorerを立ち上げてYahooのページを出してみる。


VB2008からInternet Explorer(IE)を立ち上げることで、


Internet ExplorerをVBから動かすことができる。


たとえば

IEを立ち上げて、Yahooのトップページ行く
そして
検索窓に、「ほしのあき」と入力する
それから
検索ボタンをおして
ほしのあき の検索結果を見るなどができる。


ここでは


Internet Explorerを立ち上げて
Yahooを呼び出すまでの動作です

 


        '####  IE を作成
        Dim objIE as Object


        objIE = CreateObject("InternetExplorer.application")
        objIE.visible = True


        Dim URL as String = "http://www.yahoo.co.jp"


        objIE.Navigate(URL)


        'ここから下のDoEventsは
        'IEがYahooの画面を読み込み終わったかどうか判断しています
        'でも、正確になかなか取れません


        Do While objIE.Busy
            DoEvents()
        Loop


        Do While (objIE.document.readyState <> "complete")
            DoEvents()
        Loop


        Do While objIE.readyState <> "4"
            DoEvents()
        Loop


        Sleep(1000)

ラベル:VB Internet Explorer IE
posted by kiyo at 19:55| インストール | このブログの読者になる | 更新情報をチェックする

2008年11月06日

コンボボックス(ComboBox)で選択した文字列

コンボボックス(ComboBox)で選択された文字列などは


ComboBox1.Text


で取得することができます。


今回は、コンボボックスで選択された値が変更になったら動作をするようにします。

そのためには、
Handles ComboBox1.SelectedIndexChanged


としておきます

下の例は
コンボボックスの値が変わったら、
その選択したテキストを


メッセージボックスに表示するだけの簡単なものです。

Private Sub Refresh(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        'コンボボックスの選択が変わったらおこなう

        'ComboBoxの選択された値を取得する
        Dim ComboText=ComboBox1.Text

        'メッセージボックスで表示する
        MessageBox.Show(ComboText,"選択したもの",MessageBoxButtons.OK)

End Sub
 
もしメッセージボックスのテキストによって動作を変更するなら
Select Case ComboText


        Case "はい"


        Case "いいえ"


End Select


などとComboBoxの選択されたテキストによって


分岐させればよいでしょう。

posted by kiyo at 15:41| ComboBox(コンボボックス) | このブログの読者になる | 更新情報をチェックする

ComboBox(コンボボックス)の初期設定

ComboBoxは項目をドロップダウンリストで選択させることができる、便利なパーツです。
フォームにComboBox1が貼り付けてあるとして


初期設定をしてみましょう


コンボボックスに


10
20
50
100


という数字を入れて


そのなかかから選択してもらうために


まず


 ComboBox1.Items.Clear()


と一度、ComboBoxのアイテムをクリアしています
初期設定なので、クリアする必要はないのですが。


そして


 ComboBox1.Items.Add("10")


と項目に、文字(この場合は数字ですが)をセットしていきます。

 
最後に
 
 ComboBox1.Text = "100"


として


100を選択した状態にしておきます。


Private Sub Formini(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


 ComboBox1.Items.Clear()
 ComboBox1.Items.Add("10")
 ComboBox1.Items.Add("20")
 ComboBox1.Items.Add("50")
 ComboBox1.Items.Add("100")

 ComboBox1.Text = "100"


End Sub

ラベル:Combobox
posted by kiyo at 14:12| ComboBox(コンボボックス) | このブログの読者になる | 更新情報をチェックする

2008年11月05日

CSV形式のファイルの読み込み

VB2008にはCSV形式のファイルの読み込みをしてくれる関数が用意されています。


"テニス","ラケット","シューズ"


というCSVファイルを


テニス


ラケット


シューズ


と読んでくれます。

 
下記の例は


FilePathでファイルを指定して


そこに書いてある
サイトのリストを読み込んでいます


"ID","Domain","Directory","URL","Title"


という形式のサイトリストを


List形式のDictionaryに読み込みます

 

 Public Function AllSiteListData(ByVal FilePath As String) As List(Of Dictionary(Of String, String))
        Dim FileName As String = gDataPath & "\" & FilePath
        Dim SiteData As New List(Of Dictionary(Of String, String))


        If IO.File.Exists(FileName) = False Then
            MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)


            Return SiteData
            Exit Function
        End If


        Using parser As New TextFieldParser(FileName)
            parser.TextFieldType = FieldType.Delimited
            parser.SetDelimiters(",") ' 区切り文字はコンマ
            parser.HasFieldsEnclosedInQuotes = True '単純に,で区切り


            Do While Not parser.EndOfData
                Dim row As String() = parser.ReadFields()
                Dim Item As New Dictionary(Of String, String)
                Item("ID") = row(0)
                Item("Domain") = row(1)
                Item("Directory") = row(2)
                Item("URL") = row(3)
                Item("Title") = row(7)


                SiteData.Add(Item)
            Loop
        End Using
        Return SiteData


    End Function

posted by kiyo at 15:57| ファイル | このブログの読者になる | 更新情報をチェックする

複数行のテキストファイルの読み込み

複数行のテキストファイルを読み込んで見ましょう


例として


test.txtに


VB2008
初心者


と2行のテキストファイルがあるとします


Function ReadFile() as Dictionary(Of String,String)


        Dim FileName As String = DataPath & "\test.txt"
        Dim Data As New Dictionary(Of String, String)


        If IO.File.Exists(FileName) = False Then
            MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)


            Return Data
            Exit Function
        End If


        Dim TextFile As IO.StreamReader
        Dim Line As String
        Dim i As Integer


        TextFile = New IO.StreamReader(FileName)
        i = 0
        Do While -1
            Line = TextFile.ReadLine


            Select Case i
                Case 0
                    Data("Soft") = Line
                Case 1
                    Data("Class") = Line
            End Select


            i = i + 1


            If Line Is Nothing Then
                Exit Do
            End If
        Loop
        TextFile.Close()
        Return Data
    End Function

 
これまでが関数です


この


FunctionはDictionary を返すわけです


Dim Word as New Dictionary(Of String,String)


Word = ReadFile()


Msgbox( Word("Soft"))

'ここで、ファイルの一行目 VB2008とメッセージボックスがでます


MsgBox (Word("Class"))
'ここでファイルの2行目の 初心者とメッセージが出されます

posted by kiyo at 14:54| ファイル | このブログの読者になる | 更新情報をチェックする

テキストファイルの書き出し

ファイルにデータを書き出してみましょう。

ここでは、

書き出すディレクトリ
テキスト
ファイルの名前


を指定して


指定したディレクトリに指定したファイル名でファイルを書き出します。



  'データの書き出し
    Public Function SaveData(ByVal DirectoryName As String, ByVal SaveText As String, ByVal FileName As String) As Boolean


        'ServerDirectoryがなけばエラーを返す
        If IO.Directory.Exists(DirectoryName) = False Then
            MsgBox(DirectoryPath & "がありません")
            Return False
            Exit Function
        End If


        Dim TextFile As IO.StreamWriter

        TextFile = New IO.StreamWriter(DirectoryName & FileName)
        TextFile.Write(SaveText)
        TextFile.Close()

        Return True

    End Function


使い方としては


Dim DirectoryName as String = "C:\Test"
Dim SaveText as String = "こんにちは、初めてファイルを書き出します。"
Dim FileName as String = "save.txt"

SaveData(DirectoryName,SaveText,FileName)


C:\Test\save.txt

文字コードがutf-8で
こんにちは、初めてファイルを書き出します。

と書き出します

FormにTextBoxを貼り付けて


Dim SaveText as String=TextBox1.Text.Trim

としてテキストボックスの内容を書き出してもいいでしょう


ここのTrimは

最初と最後の改行と空白を取り除いてくれます
posted by kiyo at 13:19| ファイル | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。