-1

这是我用来从 html 文件中提取 url 的代码:

private void test(string firstTag, string lastTag, string f)
        {
            List<string> imagesUrls = new List<string>();
            int startIndex = 0;
            int endIndex = 0;
            int position = 0;

            string startTag = firstTag;//"http://www.niederschlagsradar.de/images.aspx";
            string endTag = lastTag;//"cultuur=en-GB&continent=europa";

            startIndex = f.IndexOf(startTag);

            while (startIndex > 0)
            {

                endIndex = f.IndexOf(endTag,startIndex);
                if (endIndex == -1)
                {
                    break;
                }
                string t = f.Substring(startIndex, endIndex - startIndex + endTag.Length);
                imagesUrls.Add(t);
                position = endIndex + endTag.Length;
                startIndex = f.IndexOf(startTag,position);
            }
            string item = imagesUrls[imagesUrls.Count - 1];
            imagesUrls.Remove(item);
            for (int i = 0; i < imagesUrls.Count; i++)
            {
                if (f == satelliteMapToRead)
                {
                    imagesUrls[i] = stringForSatelliteMapUrls + imagesUrls[i];
                }
                using (WebClient client = new WebClient())
                {
                    client.DownloadFile(imagesUrls[i], UrlsPath + "Image" + counter.ToString("D6"));
                }
                counter++;
            }
            List<string> files = Directory.GetFiles(UrlsPath).ToList();
            uf.MakeGIF(files, localFilename + "weather", 80, true);
        }

变量 f 是我从中读取所有文本的 html 文件。在这个 html 文件中,List imagesUrls 包含 9 项:

列表中的第一项是:

http://www.sat24.com/image2.ashx?region=eu&time=201309172215&ir=true

列表中的第二项是:

http://www.sat24.com/image2.ashx?region=eu&time=201309172200&ir=true

在第一个 url 中,日期和时间是:2013 09 17 22 15 日期是 2013 09 17,时间是 22:15

在第二项中,日期和时间是:201309172200 所以它从最后一个日期和时间 url 一个到第一个。这是html文件中的顺序。

在列表中填满 9 个项目后,如何在列表 imagesUrls 中更改它,以便从第一个到最后一个?

编辑**

我这样做了:

if (f == satelliteMapToRead)
            {
                sortedList =
                imagesUrls
                .OrderBy(s =>
                DateTime.ParseExact(
                System.Web.HttpUtility.ParseQueryString(s).Get("time"),
                "yyyyMMddHHmm",
                System.Globalization.CultureInfo.InvariantCulture));
                for (int i = 0; i < sortedList.Count(); i++)
                {
                    if (f == satelliteMapToRead)
                    {
                        imagesUrls[i] = stringForSatelliteMapUrls + imagesUrls[i];
                    }
                    using (WebClient client = new WebClient())
                    {
                        client.DownloadFile(imagesUrls[i], UrlsPath + "Image" + counter.ToString("D6"));
                    }
                    counter++;
                }
            }

但是在对列表进行排序后,我需要使用排序列表而不是 imagesUrls 列表,但它们不一样,因为 imagesUrls 是列表

那么我可以在这部分代码中将 sortedList 替换为 imagesUrls List 吗?

4

1 回答 1

1

如果您有这样的 URI 列表:

var list = new List<String>()
{
    "http://www.sat24.com/image2.ashx?region=eu&time=201309172215&ir=true",
    "http://www.sat24.com/image2.ashx?region=eu&time=201309172200&ir=true",
};

您可以解析查询字符串,然后解析time参数作为 a 的一部分DateTime并将其用作OrderByLinq 中的一部分:

var sortedList = 
list
.OrderBy(
    s =>
        DateTime.ParseExact(
            System.Web.HttpUtility.ParseQueryString(s).Get("time"),
            "yyyyMMddHHmm",
            System.Globalization.CultureInfo.InvariantCulture));
于 2013-09-17T22:42:17.920 回答