어떻게 C에서 10 진수 값을 HTML 파일에 테이블의 열에서 합계 #

c# html-agility-pack html-parsing linq

문제

이 코드는 10 진수 값 열을 합산하려고하지만 int.Parse() 행에서 예외를 발생 int.Parse() . 이 문제를 해결하기 위해 코드를 수정하려고 시도한 방법과이 시도에서받은 오류에 대해이 게시물의 끝 부분을 참조하십시오.

    static void Main()
    {
        String htmlFile = "C:/Temp/Test11.html";

        HtmlDocument doc = new HtmlDocument();
        doc.Load(htmlFile);

    // Site Collection Storage Used (GB)
    var sum = doc.DocumentNode.SelectSingleNode("//table")
        // The sum will be of the row elements
        .Elements("tr")
        // Skip this many rows from the top
        .Skip(1)
        // .ElementAt(2) = third column
        // .Last() = last column
        .Sum(tr => int.Parse(tr.Elements("td").ElementAt(3).InnerText)); 
    Console.WriteLine("Site Collection Storage Used (GB): " + sum);
        Console.ReadLine();
    }

다음은 예외입니다.

    static void Main()
    {
        String htmlFile = "C:/Temp/Test11.html";

        HtmlDocument doc = new HtmlDocument();
        doc.Load(htmlFile);

    // Site Collection Storage Used (GB)
    var sum = doc.DocumentNode.SelectSingleNode("//table")
        // The sum will be of the row elements
        .Elements("tr")
        // Skip this many rows from the top
        .Skip(1)
        // .ElementAt(2) = third column
        // .Last() = last column
        .Sum(tr => int.Parse(tr.Elements("td").ElementAt(3).InnerText)); 
    Console.WriteLine("Site Collection Storage Used (GB): " + sum);
        Console.ReadLine();
    }

int.Parse ()를 Decimal.Parse ()로 대체하려고 시도했지만 나에게 알려줍니다.

    static void Main()
    {
        String htmlFile = "C:/Temp/Test11.html";

        HtmlDocument doc = new HtmlDocument();
        doc.Load(htmlFile);

    // Site Collection Storage Used (GB)
    var sum = doc.DocumentNode.SelectSingleNode("//table")
        // The sum will be of the row elements
        .Elements("tr")
        // Skip this many rows from the top
        .Skip(1)
        // .ElementAt(2) = third column
        // .Last() = last column
        .Sum(tr => int.Parse(tr.Elements("td").ElementAt(3).InnerText)); 
    Console.WriteLine("Site Collection Storage Used (GB): " + sum);
        Console.ReadLine();
    }

int.Parse()Decimal.Parse() int.Parse() 로 변경 한 후 변환 할 int 가있는 곳이 표시되지 않습니다.

내 목표를 달성하려면이 코드로 도와주세요.

다음은 참조 용 html 파일입니다.

    static void Main()
    {
        String htmlFile = "C:/Temp/Test11.html";

        HtmlDocument doc = new HtmlDocument();
        doc.Load(htmlFile);

    // Site Collection Storage Used (GB)
    var sum = doc.DocumentNode.SelectSingleNode("//table")
        // The sum will be of the row elements
        .Elements("tr")
        // Skip this many rows from the top
        .Skip(1)
        // .ElementAt(2) = third column
        // .Last() = last column
        .Sum(tr => int.Parse(tr.Elements("td").ElementAt(3).InnerText)); 
    Console.WriteLine("Site Collection Storage Used (GB): " + sum);
        Console.ReadLine();
    }

수락 된 답변

변환은 거의 확실하게 LINQ 문 외부에 있습니다. 즉, sum이 int 인 경우 명시 적 형 변환이 필요한 부분입니다. 십진수로 합계를 선언하거나 명시 적 캐스트를 삽입하면 문제가 해결됩니다.

    // Site Collection Storage Used (GB)
    sum = (int)doc.DocumentNode.SelectSingleNode("//table")
        // The sum will be of the row elements
        .Elements("tr")
        // Skip this many rows from the top
        .Skip(1)
        // .ElementAt(2) = third column
        // .Last() = last column
        .Sum(tr => decimal.Parse(tr.Elements("td").ElementAt(3).InnerText)); 
    Console.WriteLine("Site Collection Storage Used (GB): " + sum);

다음은 ideone에 대한 간단한 데모 링크입니다 (ideone에서 HTML 민첩성 팩을 사용할 수 없으므로 데이터를 문자열 배열에 복사했습니다).




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.