2014-10-31 4 views
1

2 개의 조건자를 사용하여 LINQ를 사용하는 데 문제가 있습니다. 기본적으로 아래의 내 술어와 일치하는 텍스트 파일에서 행을 제거해야합니다. 하지만 작동하지 않으며 특정 Environment.MachineName 행만 제거됩니다.LINQ를 사용하여 텍스트 파일의 줄을 필터링합니다. C#

편집 : rLogonTime에 대한 추가 입력 데이터

private static string rLogonTime = DateTime.Now.ToLongTimeString().ToString(); 

var oldLines = File.ReadAllLines(rLogonPath); 
var newLines = oldLines.Where(x => !x.Contains(Environment.MachineName) && !x.Contains(rLogonTime)); //<-- 
File.WriteAllLines(rLogonPath, newLines); 

는이 작업을 수행 할 수 있습니까? 아니면 다른 방법이 있습니까?

건배.

편집 : 다시 한 번 분명하지 않은 점에 대해 사과드립니다. rLogonTime은 정적 문자열이며 내 텍스트 파일에는 내 앱의 디버그 모드에서와 동일한 값이 포함됩니다. 시도해 보면

var newLines = oldLines.Where(x => !x.Contains(rLogonTime)); 

그 자체로 작동합니다. 같음 Environment.MachineName

그러나 그들은 함께 작동하지 않습니다.

또한 요청한대로 텍스트 파일의 몇 줄.

u####,######!,####.vshost.exe,31/10/2014,11:58:11 AM,PC-67027 
u####,######!,####.vshost.exe,31/10/2014,12:15:02 PM,PC-65027 
+0

은 왜 제거 할 @BradleyDotNET 선은 없습니까? 논리는 한 가지를 포함하지 않고 다른 것을 포함하지 않는 모든 선을 지켜야한다고 말합니다. 두 가지 중 하나를 포함하는 모든 줄을 제거합니다. – Servy

+0

@BradleyDotNET Appologies, 위의 내 질문에 편집 된 특정 컴퓨터 이름에 대한 유일한 줄을 제거합니다 있지만 rLogonTime 확인하지 않습니다. –

+2

@TonyMontana 확실히 rLogonTime을 확인합니다. 그것은 단지 어떤 것과도 일치하지 않습니다. datetime 형식 차이 때문일 수 있습니다. –

답변

2

논리가 거의 정확하다고 생각합니다. 당신은 Environment.MachineNamerLogonTime를 포함하는 모든 행을 제외 할, 그래서 당신은 제외 할 줄은 것입니다 :

contains MachineName AND contains LogonTime 

그래서 NOT에서 모든 포장 :

var newLines = oldLines.Where(x => !(x.Contains(Environment.MachineName) && x.Contains(rLogonTime))) 
+1

매직, 작동합니다! 고맙습니다. –

관련 문제