http://www.gotdotnet.com/japan/student/column/firststep/firststep18.aspx
↑のページをやっています。
しかし、私の環境は、Visual C++ .NET 2003
上記URLの環境はVC# .NETで書いてある。
/* ダウン対象URLと 保存先パスの取得 */
downurl = this->TextUrl->Text;
filepath = this->textFilePath->Text;
/* ダウンロード対象ページtemp.htmlとして保存 */
WebClient* myWebClient = new WebClient();
myWebClient->DownloadFile(downurl,"c:\temp.html");
/* c:\temp.html の内容を contents に格納 */
StreamReader* reader =
File::OpenText("c:\temp.html");
contents = reader->ReadToEnd();
reader->Close();
// contents からリンク情報のリストを抽出
System::Text::RegularExpressions::Regex *regex =
new System::Text::RegularExpressions::Regex("<a +href=('|\")[^('|\")]*('|\") *>");
System::Text::RegularExpressions::MatchCollection *matchcollection =
regex->Matches(contents);
// 各リンク情報から URL情報 を排出し、DL
for(i=0;i<matchcollection->Count;++i)
{
/* 各リンク情報から URL情報 を排出 */
System::Text::RegularExpressions::Regex *urlregex =
new System::Text::RegularExpressions::Regex("('|\")[^('|\")]*('|\")");
System::Text::RegularExpressions::Match *match =
urlregex->Match(matchcollection->Item[i]);
url = match->Value->Substring(1, match->Value->Length-2);
/* 排出されたやつをテキストボックスに表示 */
this->textUrlList->Text = String::Concat(textUrlList->Text,url);
this->textUrlList->Text = String::Concat(textUrlList->Text,"\r\n");
このソースの urlregex->Match(matchcollection->Item[i]);
でエラーが発生。
error C2664: 'System::Text::RegularExpressions::Match __gc *System::Text::RegularExpressions::Regex::Match(System::String __gc *)' : 1 番目の引数を 'System::Text::RegularExpressions::Match __gc *' から 'System::String __gc *' に変換できません。
ぐぐってみても、さっぱりなので、よろしくお願いします
すいません。
キャストして、解決しました。
matchcollection->Item[ i ] は Match* 型
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemtextregularexpressionsmatchcollectionclassitemtopic.asp
Match* 型からString型の値をとるには
matchcollection->Item[ i ]->Value
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemtextregularexpressionsmatchmemberstopic.asp
でいいのでは?
(C#のやつではmatchcollection[i].Valueとなっていますが。)
> キャストして、解決しました。
キャストを使わない方法があるならば、使わないほうがいいです。
typo
> Match* 型からString型の値をとるには
Match* 型からString*型の値をとるには
ツイート | ![]() |