2010-08-06 3 views
4

robots.txt 구문 분석 응용 프로그램에서 작업. 필자는 웹 서버에서 파일을 가져 와서 출력을 텍스트 상자에 던진 메서드를 직접 작성했습니다. 나는 일반적으로 robots.txt를 보았을 때와 마찬가지로 파일에있는 모든 줄에 텍스트의 한 줄을 표시하도록 출력을 원합니다. 그러나 텍스트 상자의 출력은 모두 텍스트 줄이 아닙니다. 캐리지 리턴 또는 줄 바꿈. 그래서 나는 교활하다고 생각하고, 모든 라인에 대해 문자열을 만들고, foreach 루프를 만들고, 모든 것이 잘 될 것이라고 생각했습니다. 아아, 작동하지 않았다, 그래서 나는 System.Enviornment를 시도 할 것이라고 생각했다 .Newline은 여전히 ​​작동하지 않는다. 이제는 소리가 나는 코드가 있습니다 .... 어떻게이 코드를 변경하여 여러 줄의 텍스트를 함께 자필 한 것과 대조적으로 robots.txt의 모든 개별 줄을 얻을 수 있습니까?C#을 사용하여 robots.txt 파일의 개별 행 구문 분석

public void getRobots() 
{ 
    WebClient wClient = new WebClient(); 
    string url = String.Format("http://{0}/robots.txt", urlBox.Text); 

    try 
    { 
     Stream data = wClient.OpenRead(url); 
     StreamReader read = new StreamReader(data); 
     string[] lines = new string[] { read.ReadToEnd() }; 

     foreach (string line in lines) 
     { 
      textBox1.AppendText(line + System.Environment.NewLine); 
     } 
    } 
    catch (WebException ex) 
    { 
     MessageBox.Show(ex.Message, null, MessageBoxButtons.OK); 
    } 
} 

답변

7

확인 할 수있을 것 같아요 파일의 전체 내용을 TextBox에 추가 한 다음 줄 바꿈 문자를 추가합니다. 그 라인을 다음으로 바꾸십시오 :

string content = read.ReadToEnd(); 
string[] lines = content.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 

그리고 이것이 작동하는지 확인하십시오.

편집 : 대안 그리고 아마도 더 효율적인 방법은 아래 물고기의 의견에 따라하여 읽기 라인에 대한이와 함께 try 블록 내에서 코드를 라인 - 교체 :

Stream data = wClient.OpenRead(url); 
StreamReader read = new StreamReader(data); 

while (read.Peek() >= 0) 
{ 
    textBox1.AppendText(read.ReadLine() + System.Environment.NewLine); 
} 
+0

이것은 나에게 의미가 있지만, Split에는 char []가 필요합니다 ... 어떻게 수정합니까? 슬라이스처럼해야합니까? 음수 인덱스 유형을 찾고있는 : 모든 진술에? – Stev0

+0

아니요, 'Split'은 코드에서와 같이 문자열 배열을 가져옵니다. http://msdn.microsoft.com/en-us/library/tabh47cf.aspx –

+0

여기에 작성한 코드는 내게 예외의 무리.문자열 []을 가져올 수 있고 char []에 대한 불만을 제기하고 문자열을 문자열로 변환 할 수 있음을 이해했습니다. – Stev0

2

textBox1 여러 줄을 만들어야합니다.

string[] lines = new string[] {read.ReadToEnd()}; 

그래서 모든 루프는 다음과 같습니다 그럼 난 당신이 단순히

textBox1.Lines = lines; 

을 이동하지만, 나에게 당신은 lines 배열의 첫 번째 요소에 전체 파일을 읽고

+0

을의 Robots.txt를 모든 허용하지 않음에 대한 캐리지 리턴으로 출력한다보십시오 문을 대신 모두의 그들 중 하나가 다른 하나의 오른쪽에 추가됩니다. 텍스트는 끝나고 캐리지 리턴은 여러 줄로 채워지지만 필자가 원하는 곳에 캐리지 리턴으로 가져올 수 있습니까? – Stev0

+0

간단히 textBox1.Line = lines을 설정해 보셨습니까? – w69rdy

+0

는 textbox1.Lines에 시도했지만 .... 여전히 나에게 같은 문제를주고 있습니다. 출력은 다음과 같습니다. Disallow :/etcDisallow :/adminDisAllow :/debugDisallow :/test, ect. 모든 Disallow 또는 Allow 문에 대해 한 줄을 표시하고 싶습니다. – Stev0

1

.Read를 사용해보십시오() while 루프 대신 .ReadToEnd() - 난 당신이 줄 배열에서 한 줄로 전체 파일을 받고 있다고 생각합니다. 디버그하고 선의 수를 확인하여이를 확인하십시오.

편집 : 여기 샘플 코드가 있습니다. 그것을 테스트하지 않았지만, 그것이 잘 작동한다고 생각합니다; 또는 허용 :

Stream data = wClient.OpenRead(url); 
StreamReader read = new StreamReader(data); 

List<string> lines = new List<string>(); 

string nextLine = read.ReadLine(); 
while (nextLine != null) 
{ 
    lines.Add(nextLine); 
    nextLine = read.ReadLine(); 
} 

textBox1.Lines = lines.ToArray(); 
1

.... 여러가 문제가되지 않습니다 그것은 여러이다

public void getRobots() 
{ 
    WebClient wClient = new WebClient(); 
    string robotText; 
    string[] robotLines; 
    System.Text.StringBuilder robotStringBuilder; 

    robotText = wClient.DownloadString(String.Format("http://{0}/robots.txt", urlBox.Text)); 

    robotLines = robotText.Split(Environment.NewLine); 

    robotStringBuilder = New StringBuilder(); 

    foreach (string line in robotLines) 
    { 
     robotStringBuilder.Append(line); 
     robotStringBuilder.Append(Environment.NewLine); 
    } 

    textbox1.Text = robotStringBuilder.ToString(); 
} 
관련 문제