2014-07-24 15 views
-2

로 목록보기에 보관 : 나는 하나의 공간에 공백을 제거하고 원하는 한C# WPF는 라인으로 .txt 파일 라인을 읽고 나는 다음과 같은 형식의 텍스트 .txt 파일이 GridViewColumn

14:04:43 29.07.2014 Process information for JONAS-PC: 

Name    Pid CPU Thd Hnd Priv  CPU Time Elapsed Time 
Idle     0 98 8 0  0 1008:29:34.706 148:49:00.765 
chrome    5020 1 14 169 136008  0:00:46.332  0:06:03.319 
chrome    5960 0 10 149 335704  0:19:09.992 21:07:14.101 
pslist    7564 1 2 164 3324  0:00:00.218  0:00:01.236 
wininit    640 0 3 85 2528  0:00:00.078 148:48:53.839 
csrss    664 0 14 1091 13240  0:03:13.675 148:48:53.823 
services   696 0 6 302 10912  0:00:33.243 148:48:53.776 
lsass    716 0 8 959 9176  0:01:01.979 148:48:53.698 
lsm     728 0 11 189 3560  0:00:00.577 148:48:53.698 
winlogon   808 0 3 121 4532  0:00:00.171 148:48:53.308 
svchost    896 0 11 414 8260  0:02:41.273 148:48:47.817 
svchost    988 0 13 377 9064  0:03:21.896 148:48:47.739 
atiesrxx   136 0 6 132 2276  0:00:00.015 148:48:47.723 
svchost    580 0 20 578 25760  0:01:23.975 148:48:47.708 
svchost    800 0 28 633 177208  0:37:12.592 148:48:47.692 
svchost    912 0 27 847 22020  0:00:20.638 148:48:47.692 
svchost   1048 0 38 1432 52952  0:01:33.834 148:48:47.677 
UMVPFSrv   1076 0 3 75 1412  0:00:00.109 148:48:47.677 
MSI86DA.tmp  1244 0 4 66 2532  0:00:00.015 148:48:47.474 
atieclxx   1376 0 10 140 3352  0:00:00.218 148:48:47.443 
svchost   1408 0 17 532 34716  0:00:40.139 148:48:47.427 
spoolsv   1672 0 12 315 9544  0:00:00.218 148:48:47.045 
svchost   1744 0 18 452 32556  0:01:45.175 148:48:46.985 
armsvc    1888 0 4 85 1316  0:00:00.000 148:48:46.915 

RegexOptions options = RegexOptions.None; 
      Regex regex = new Regex(@"[ ]{2,}", options); 
      string fs = regex.Replace(s, @" "); 
      var fs1 = fs.Split(' ','\n'); 






    _GameCollection.Add(new GameData { 
     Name = fs1[18], 
     PID = fs1[19], 
     CPU = fs1[20], 
     Thd = fs1[21], 
     Hnd = fs1[22], 
     CpuTime = fs1[23], 
     ElapsedTime = fs1[24] 

    }); 

     _GameCollection.Add(new GameData 
     { 

     }); 
    } 


    public ObservableCollection<GameData> GameCollection 
    { get { return _GameCollection; } } 


} 

public class GameData 
{ 
    public string Name { get; set; } 
    public string PID { get; set; } 
    public string CPU { get; set; } 
    public string Thd { get; set; } 
    public string Hnd { get; set; } 
    public string CpuTime { get; set; } 
    public string ElapsedTime { get; set; } 
} 
+0

나는 이것을 어떻게 할 수 있을까? – mohrjon1

+1

[도움말 센터] (http://stackoverflow.com/help/how-to-ask) –

+0

분할에 대해 읽어보십시오.이 [비슷한 게시물] (http :// /stackoverflow.com/questions/14407762/c-sharp-split-textfile-into-a-2-dimensional-string-array)이 경우에는 탭 대신 쉼표로 구분됩니다. –

답변

5

이있다 같습니다 GridviewColumn에 등 모든 라인을 이름도 (Pid)에서 evrything를 추가하고이로 파일을 분할하는 것은 내가 GridViewColumn에 에브리 줄을 추가하기 위해이 문제를 해결할 수있는 방법 GridViewColumn의 추가 라인 이 작업과 관련된 몇 가지 작업 :

  1. 첫 번째는 나쁘지없는 GridView

의 개체

  • 디스플레이 해당 개체에 텍스트 파일을 읽어보십시오.

    public class ProcessInfo 
    { 
        public string Name { get; set; } 
        public int PID { get; set; } 
        public int CPU { get; set; } 
        public int Thd { get; set; } 
        public int Hnd { get; set; } 
        public TimeSpan CpuTime { get; set; } 
        public TimeSpan ElapsedTime { get; set; } 
    } 
    

    그런 다음 우리는 텍스트 파일을 구문 분석해야합니다 : 먼저 우리가 모든 것을 저장하는 클래스가 필요

    <ListView ItemsSource="{Binding Processes}"> 
        <ListView.View> 
         <GridView> 
          <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/> 
          ... 
         </GridView> 
        </ListView.View> 
    </ListView> 
    

    : 마지막으로

    List<ProcessInfo> processes = new List<ProcessInfo>(); 
    StreamReader reader = new StreamReader("input.txt'); 
    reader.ReadLine(); //The headers don't matter! 
    
    string currentLine; 
    while (currentLine = reader.ReadLine() != null) 
    { 
        ProcessInfo newInfo = new ProcessInfo(); 
        //Actual parsing left up to the reader; String.Split is your friend. 
        processes.Add(newInfo); 
    } 
    

    을, 우리는 XAML을 설정해야합니다 각 열을 ProcessInfo 클래스의 속성에 바인딩합니다. 첫 번째 열에 대한 견본을 포함 시켰습니다. 물론, 파싱 된 콜렉션을 View Model의 공개 속성으로 노출시켜야 작동 할 수 있습니다.

  • +0

    @ mohrjon1 나는 내 대답을 받아들이지 않았습니다. 내가 고칠 수있는 잘못된 것이 있습니까? – BradleyDotNET

    +0

    답변 해 주셔서 감사합니다. 이제 Text by Spaces를 분할 할 수 있지만 어떻게 그것을 새로운 Column에 추가 할 수 있습니까? – mohrjon1

    +0

    @ mohrjon1 분할 했으므로 오브젝트로 파싱 할 수 있어야합니다. 그런 다음 내 견본에있는 것과 같은 열을 원하는 속성에 추가하십시오. 어떤 단계가 당신을 혼란스럽게하는지 명확하게 설명해 주시겠습니까? – BradleyDotNET

    2

    스플릿의 경우 정규식을 사용할 수 있습니다.

    string inputLine = "Idle     0 99 8 0  0 203:18:16.647 26:02:53.315"; 
    
    string[] splitList = Regex.Split (inputLine, "\\s{1,30}"); 
    string name = splitList [0]; 
    string pid = splitList [1]; 
    string CPU = splitList [2]; 
    ...