Avatar billede henrik_40 Nybegynder
11. juli 2007 - 19:47 Der er 8 kommentarer og
1 løsning

Brug af streamreader

Hej
Jeg har lavet flg. kode som henter en html-side ind:
  public String GetHtmlPage(string strURL)
    {

        {
            // the html retrieved from the page
            String strResult;
            WebResponse objResponse;
            WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL);
            objResponse = objRequest.GetResponse();
            // the using keyword will automatically dispose the object
            // once complete
            using (StreamReader sr =
            new StreamReader(objResponse.GetResponseStream()))
            {
              strResult = sr.ReadToEnd();

                // Close and clean up the StreamReader
                sr.Close();
            }
            return strResult;
        }


Den virker fint, men problemet er bare at jeg ikke skal have <html><head>, <body> osv.
Derfor ønsker jeg mig en blok af hjemmesiden:
fra blok1= <!-- START-NYHEDER -->

og til Blok2 = <!-- SLUT-NYHEDER -->

Min tanke er så at bruge en sr.readLine() og undersøge værdien af hver linje. Men det er gået fuldkommen galt for mig.
Er her nogen her som kan hjælpe mig??

/henrik
Avatar billede arne_v Ekspert
11. juli 2007 - 19:58 #1
Jeg ville holde mig til ReadToEnd og enten bruge noget IndexOf eller gaa over til regex.
Avatar billede henrik_40 Nybegynder
11. juli 2007 - 20:04 #2
Altså at læse hjemmesiden ind i strResult og herefter hive den ud med indexOf eller regex?
Avatar billede arne_v Ekspert
11. juli 2007 - 20:15 #3
Jep.

(IndexOf sammen med Substring)
Avatar billede henrik_40 Nybegynder
11. juli 2007 - 20:26 #4
Jeg er træt og lidt blank. Kan du hjælpe mig yderligere på vej. Jeg skal vel gennemløbe strengen?
Avatar billede arne_v Ekspert
11. juli 2007 - 21:07 #5
Utestet:

    public static string Find(string html)
    {
        Match m = Regex.Match(s, "(?:<!-- START-NYHEDER -->)(.*?)(?:<!-- SLUT-NYHEDER -->)");
      return m.Groups[1].ToString();
    }
Avatar billede henrik_40 Nybegynder
11. juli 2007 - 21:35 #6
Hej Arne
Jeg må prøve dit forslag i morgen, eller mit eget:

Jeg er ellers næsten selv på vej :-)


public String GetHtmlPage(string strURL)
    {

        {
            // the html retrieved from the page
            String strResult, Result;
            WebResponse objResponse;
            WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL);
            objResponse = objRequest.GetResponse();
            // the using keyword will automatically dispose the object
            // once complete
            using (StreamReader sr =
            new StreamReader(objResponse.GetResponseStream()))
            {
              strResult = sr.ReadToEnd();

                // Close and clean up the StreamReader
                sr.Close();
            }

            int startIndx = strResult.IndexOf("<!-- START-NETPOSTEN-NYHEDER -->"); // giver 700
            int endIndx = strResult.IndexOf("<!-- SLUT-NETPOSTEN-NYHEDER -->"); // giver 4864
            Result = strResult.Substring(starIndx, endIndx);
            return Result;
        }

    }
}

startindex på 700 er alt for højt. Ligger snarere på 100. Ligeledes er 4864 vist også for højt...Det må være en lille dum fejl. MÅske du kan gennemskue fejlen, ellers må jeg prøve dit forslag..

TAk indtil nu :-)
/henrik
Avatar billede arne_v Ekspert
12. juli 2007 - 02:41 #7
using System;
using System.Text.RegularExpressions;

namespace E
{
    public class MainClass
    {
        public static void Main(string[] args)
        {
            string html = @"<html>
<head>
<title>Test</title>
</head>
<body>
<!-- START-NYHEDER -->
1
2
3
<!-- SLUT-NYHEDER -->
</body>
</html>";
            int ix1 = html.IndexOf("<!-- START-NYHEDER -->");
            ix1 += "<!-- START-NYHEDER -->".Length;
            int ix2 = html.IndexOf("<!-- SLUT-NYHEDER -->", ix1);
            string s1 = html.Substring(ix1, ix2 - ix1);
            Console.WriteLine(s1);
            Match m = Regex.Match(html, "(?:<!-- START-NYHEDER -->)(.*?)(?:<!-- SLUT-NYHEDER -->)", RegexOptions.Singleline);
            string s2 = m.Groups[1].Value;
            Console.WriteLine(s2);
            Console.ReadLine();
        }
    }
}

virker !
Avatar billede henrik_40 Nybegynder
12. juli 2007 - 11:01 #8
Jeg takker mange gange. Læg et svar til mig.
Avatar billede arne_v Ekspert
12. juli 2007 - 13:47 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester