這是代碼:我想提取特定的字符串,但唯一不能得到的是數字爲什麼?
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using HtmlAgilityPack;
namespace ScrollLabelTest
{
class ExtractLinks
{
WebClient contents = new WebClient();
string cont;
List<string> links = new List<string>();
List<string> FilteredLinks = new List<string>();
List<string> Respones = new List<string>();
public void Links(string FileName)
{
HtmlDocument doc = new HtmlDocument();
doc.Load(FileName);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
HtmlAttribute att = link.Attributes["href"];
if (att.Value.StartsWith("http://rotter.net/forum/scoops1"))
{
links.Add(att.Value);
}
}
for (int i = 0; i < links.Count; i++)
{
int f = links[i].IndexOf("#");
string test = links[i].Substring(0, f);
FilteredLinks.Add(test);
}
for (int i = 0; i < FilteredLinks.Count; i++)
{
contents.Encoding = System.Text.Encoding.GetEncoding(1255);
cont = contents.DownloadString(FilteredLinks[i]);
Respones.Add("Thread #1");
GetResponsers(cont);
}
}
private void GetResponsers(string contents)
{
string firstTag = "<FONT CLASS='text16b'>";
string lastTag = "&n";
int f = contents.IndexOf(firstTag);
int g = contents.IndexOf(lastTag, f);
string responser = contents.Substring(f + firstTag.Length, g - f - firstTag.Length);
}
}
}
的問題是在過去的方法GetResponsers: 這是文本內容,這是很多,我想提取特定文本一行一行:
<font size="2" face="Arial" color="#000099"> <FONT CLASS='text16b'>43.יהי זכרו ברוך, שימליץ עלינו מלמעלה. </font><br>
什麼我想提取僅這一部分:
43.יהי זכרו ברוך, שימליץ עלינו מלמעלה.
包括poins(點)和inclusing該類別中的數ASE 43 但我得到的變量應答機是:
אזכרה במלאת שנתיים לפטירתו של אבי מורי ז''ל הרב ישעיהו רוטר.
我怎麼也解接近它的數量和點/點:43? 所以我會在響應器得到的將是:
43.יהי זכרו ברוך, שימליץ עלינו מלמעלה.
我如何使用代碼我已經在GetResponsers它做什麼?
我試圖用一個循環:
private void GetResponsers(string contents)
{
while(true)
{
string firstTag = "<FONT CLASS='text16b'>";
string lastTag = "&n";
int f = contents.IndexOf(firstTag);
int g = contents.IndexOf(lastTag, f);
string responser = contents.Substring(f + firstTag.Length, g - f - firstTag.Length);
UsersRespones.Add(responser);
}
}
但名單UserResponses含有更多的則1000個指數法,他們都相同的字符串。 它從文本中提取相同的索引。
我怎樣才能讓循環提取下一個地方的標籤出現的每個下一個字符串?
確定這是文本塊中的每個時間我應該在GetResponsers方法內環路來回提取:
SIZE="2" FACE="Arial" color="#000099"><a href="#19"><font color=''>שנתיים?</font></a></font></td>
<td align="center" nowrap><font SIZE="1"
FACE="Arial" color="#000099">אפריאט</font></td>
<td align="center" nowrap><font SIZE="1"
FACE="Arial" color="#000099">16.06.14 <font SIZE="1"
FACE="Arial" color="red">18:30</font></td>
<td align="center" nowrap><font SIZE="1"
FACE="Arial" color="#000099">19</font></td>
</tr>
從這個塊我應該得到一些東西:
數在這種情況下#19並將其添加到列表中
本案例中的文字:שנתיים?並把它添加到列表
在這種情況下,日期:14年6月16日,並添加到列表
的時間在這種情況下:18:30,也到列表
然後在下一個循環中重複who內容變量中的下一個塊。 等等,直到完成時才結束它,應該返回到鏈接方法下載下一個內容並再次循環它......等等方法鏈接中的所有鏈接。
而我更願意在使用IndexOf和Substring的GetResponsers中使用我的代碼。
編輯
嘗試這樣:
private void GetResponsers(string contents)
{
int startPos = 0;
while(true)
{
string firstTag = "<FONT CLASS='text16b'>";
string lastTag = "&n";
int f = contents.IndexOf(firstTag, startPos);
int g = contents.IndexOf(lastTag, f);
startPos = g + lastTag.Length;
string responser = contents.Substring(f + firstTag.Length, g - f - firstTag.Length);
UsersRespones.Add(responser);
}
}
轉Bt基因就行了越來越異常:
int g = contents.IndexOf(lastTag, f);
指數超出範圍。必須是非負數並且小於集合的大小
這是在添加startPos之後發生的。
contents.Substring的*調用(...)*應爲您提供包括 「43」 的字符串。您的問題中的* GetResponsers *方法與您的實際代碼中的方法不同(因此沒有說明問題),或者傳遞給* GetResponsers *的* contents *字符串不包含「43」。... – elgonzo
我現在知道這個問題。變量cont下載鏈接cont = contents.DownloadString(FilteredLinks [i]);然後在GetResponsers即時只獲得第一個響應,然後它只是繼續到下一個鏈接,並進行另一次下載,每次只獲得第一個響應。 FilteredLinks包含50個鏈接。 – user3747465
我需要的是以某種方式使循環可能與while,並在GetResponsers方法中提取所有的響應,只有當完成後,讓他們所有人contine和下載下一個鏈接。如何在GetResponsers方法內使用循環? – user3747465