2011-09-28 3 views
0

다음 코드가 있습니다. 웹 사이트에서 일부 작업을하고 있지만 때로는 리디렉션하고 리디렉션 된 사이트에서 작업하고 싶습니다. 그러나 작업을 수행하기 전에 모든 사이트에서 리디렉션을 확인하고 싶지는 않습니다. 어떻게 루프에 삽입 할 수 있습니까? 문자열 배열에 삽입 할 수 없다는 것을 알고 있지만 가장 좋은 구조는 무엇입니까? 삽입으로 인해 아마도 목록에 올랐을 것입니다. 비록 우리가 이미 처리 한 값을 유지하려고하지 않더라도 말입니다. 나는 C#에 익숙하지 않다.배열에 foreach로 삽입

string[] lines = System.IO.File.ReadAllLines(@"my_file_with_urls.txt"); 

foreach (string line in lines) 
{ 
    Uri default_uri = new Uri(line); 
    Uri response; 

    WebSiteIsAvailable(default_uri, out response); 

    //Do work on the actual link 

    if (!response.Host.Equals(default_uri.Host)){ 
    //I want to run the work on the redirected website 
    } 
} 
+0

코드에 어떤 문제가 있습니까? 어떤 종류의 오류가 있습니까? – Marco

+0

삽입 하시겠습니까? 별도의 목록을 만들어 나중에 추가 할 수 없습니까? – V4Vendetta

답변

1
var urisToProcess = new HashSet<Uri>(
    lines.Where(s => Uri.IsWellFormedUriString(s, UriKind.Absolute)).Select(s => new Uri(s))); 
var redirectedUris = new HashSet<Uri>(); 
foreach (var uri in urisToProcess) 
{ 
    Uri response;  
    WebSiteIsAvailable(uri, out response); 
    if(response.Equals(uri)) 
    { 
    // do work on actual URI 
    continue; 
    } 
    while (!response.Equals(uri)) 
    {  
    uri = response; 
    WebSiteIsAvailable(uri, out response); 
    } 
    if(!urisToProcess.Contains(uri)) 
    { 
    redirectedUris.Add(uri); 
    } 
} 
foreach (var uri in redirectedUris) 
{ 
    // do work on redirected URI 
} 
+0

고마워요! Hashset은 중복 된 줄의 다른 문제를 해결합니다.) BTW 모든 줄을 uris로 변환하고 한 줄이 적절한 Uri가 아닌 경우 예외가 발생합니다. 그러나 첫 번째 줄에 대해서만, 모든 잘못된 URL을 올바르게 처리하는 방법은 무엇입니까? – tothphu

+0

당신은 Uri.IsWellFormedUriString (uriString, UriKind.Absolute)을 사용할 수 있습니다. 나는 대답을 업데이트했습니다. – bitbonk

+0

차가움. 감사. 잘되지 않은 URL도 어떻게 추출 할 수 있습니까? 나는 그것들을 알고 싶기 때문에 어떤 자료도 풀지 않도록한다. – tothphu

0

시도해 볼 수는 있지만 완전히 테스트하지는 못했습니다.

foreach (string line in lines) 
{ 
Uri default_uri = new Uri(line); 
Uri response;  
WebSiteIsAvailable(default_uri, out response);  

while (!response.Host.Equals(default_uri.Host)) 
{  
    default_uri = response; 
    WebSiteIsAvailable(default_uri, out response); 
} 

//Do work on the actual link as now default_uri contains the working link. 
} 
0

foreach를 사용하여 배열 또는 목록에 항목을 삽입 할 수 없습니다. 대신에 for 루프를 만들고 루프의 인덱스를 줄이십시오.