2017-05-09 7 views
0

파일의 부분 문자열을 찾으려고합니다. 파일을 열고 각 줄을 한 번에 한 줄 씩로드합니다. 그런 다음 각 문자열에 하위 문자열의 상태 중 하나가 포함되어 있는지 확인하고 싶습니다. 상태가 문자열에 있음을 알고 있더라도 "하위 문자열을 찾을 수 없습니다"를 반환하기 때문에 의도 한대로 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?C#을 사용하여 LINQ에 사용하는 방법

편집 : 나는 오류가이 라인은 완전히 틀렸다 지금 무엇을 실현 :

if (lines.Any(stringToCheck.Contains)) 

그것은 다음과 같이해야한다 : 도움말들에 대한

if (stringToCheck.Any(s.Contains)) 

감사합니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main (string[] args) 
    { 

     string[] stringToCheck = {"Alabama","Alaska","Arizona","Arkansas","California","Colorado"}; 

     string[] lines = File.ReadAllLines(@"C:\C# Project\sampledata.dat"); 
     foreach (string s in lines) 
     { 
      if (lines.Any(stringToCheck.Contains)) 
      { 
       Console.WriteLine("Found substring"); 
       Console.WriteLine(s); 
       Console.ReadLine(); 
      } 
      else 
      Console.WriteLine("Could not find substring"); 
      Console.WriteLine(s); 
      Console.ReadLine() ; 
     } 


    } 
} 

}

+2

이 줄 자체가 잘못되었습니다. lines.Any (stringToCheck.Contains) 루프에 있지만 stringToCheck가 둘 이상의 값을 가지고 있지만 모든 라인을 반복 처리하고 있습니다. 여기에 포함 된 내용도 여기에서 실패 할 수 있습니다 – Gururaj

+0

먼저 'stringA.Contains stringB)'. 그것은 무엇을합니까? 그런 다음 - 문자열에 대해 잠시 잊어 버리십시오. 포함합니다 - 린크의 목록은 무엇입니까? 일부 (일부)는합니까? – elgonzo

+0

@ Grururaj 당신은 답변이 아니라 코멘트로 게시해야합니다. –

답변

3

당신은 이 라인에이 포함 된 각 상태에 대한 문자열 가 있는지 확인하기 위해 국가의리스트를 Any를 사용할 수 있습니다. 샘플의 경우 :

if (stringToCheck.Any(x = > s.Contains(x)) 
    { 
     // ... 
    } 
0

은 당신이 뭔가를 할 수 있습니다 : 다음

if (line.Any(x=>CheckKeyWordsInLine(line, stringToCheck)){ 
    //The line contains one of the keywords 
}else{ 
    //The line does not contain any of the keywords 
} 

:

string[] stringToCheck = { "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado" }; 

//Some test lines 
string[] lines = { "sadnaskjd Alabama", "sadasd Arizona", "asdasdaer" }; 

//A bool telling me if I found anything, 
//you could skip the bool and just use else in the foreach :) 
bool contains = false; 


foreach (var check in stringToCheck) 
{ 
    if (lines.Any(l => l.Contains(check))) 
    { 
     Console.WriteLine("Found substring"); 
     Console.WriteLine(s); 
     contains = true; 
    } 
} 

if (contains == false) 
{ 
    Console.WriteLine("Could not find substring"); 
    Console.ReadLine(); 
} 
0

당신이 뭔가를 할 수 있습니다 CheckKeyWordsInLine을 정의하십시오. 다음과 같이 작동합니다 :

bool CheckKeyWordsInLine(string line, string[] keywords){ 

foreach(var key in keywords) 
{ 
    if(line.Contains(key)) 
    { 
     return true; 
    } 
} 
return false; 
} 
0

이 아이디어를 시도해보십시오

if(stringToCheck.Any(e => s.Contains(e)){ 
    // 
}