2017-03-29 1 views
1

나는 파일에서 2D 텍스트를 읽기에 문제가하고 INT 배열을 가져옵니다. 특히, 내 텍스트 파일과 같은 다음과 같습니다읽기 2D 매트릭스는

2,3,4,5,6

5,2,3,4,5

2,4,6,7,4

2,7,8,5,6

매트릭스의 각 셀은 쉼표로 구분되며 각 새 행은 줄 바꿈으로 시작합니다.

나는 그것이 작동하는지 확인하는 여러 가지 방법을 시도했지만 그럴 수 없어! 간단히 말하면, int[][] 또는 int[,] 배열이 필요합니다.

P.S : 난 간단히 아래 int[] 1-D 행렬을 읽을 수

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray(); 

답변

1
// Read the text file 
var text = File.ReadAllLines(@"path\to\file.txt"); 

// Split on `,`, convert to int32, add to array, add to outer array 
var result = text.Select(x => (x.Split(',').Select(Int32.Parse).ToArray())).ToArray(); 

결과 int[][]이다.

0

당신은 모든 라인을 읽고,하지만 코드 만 한 줄을 처리합니다. 2 차원 정수 배열을 만들려고한다면 다음과 같이하면됩니다 :

문자열 텍스트 = @ "2,3,4,5,6 5,2,3,4,5 2, 4,6,7,4 ";

text.Split ('\ n'). (line => line.Split (','))을 선택하십시오. (t => int.Parse (t)) .ToArray())를 선택하십시오.

+0

(및 내 정적 문자열 양식에 붙여 넣을 때 줄 바꿈을 잃었습니다.) –

1

(테스트 목적으로 내가 정적 문자열로 읽을 파일을 교체 한 경우)이 시도 :

int[][] list = File.ReadAllLines("myfile.txt") 
       .Select(l => l.Split(',').Select(i => int.Parse(i)).ToArray()) 
       .ToArray(); 
: 그 힘 작업 당신은 또한 대안이있는 경우

String input = File.ReadAllText(@"c:\myfile.txt"); 

int i = 0, j = 0; 
int[,] res = new int[10, 10]; 
foreach (var row in input.Split('\n')) 
{ 
    j = 0; 
    foreach (var col in row.Trim().Split(' ')) 
    { 
     res[i, j] = int.Parse(col.Trim()); 
     j++; 
    } 
    i++; 
} 

+0

친애하는 Arvin, 대체 방법을 잘 작동합니다. 고맙습니다! – MASOUD

+0

잘 모르겠다. float [] [] list = File.ReadAllLines ("myfile.txt") .Select (l => l.Split (','). Parse (i)) .ToArray()) .ToArray(); – Arvindsinc2

1

먼저 각 행의 색인을 첫 번째 차원에 추가 한 다음 행의 모든 ​​'열'을 두 번째 차원에 추가해야합니다. 만약 가지고 가변 배열 INT [] []에 또는 BI 차원으로 각 라인의 참조를 저장하고,

int[][] array = File.ReadAllText(filepath).Split('\n') 
       .Select(r => (r.Split(',')) 
       .Select(c => int.Parse(c)).ToArray()).ToArray(); 
0

단지 시점의 문제를 설명하기 :

다음 코드를 시도 배열 INT [,]

난 당신이 가변 배열을 만들려면 당신이 https://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396

전에 여기을 살펴보고 제안하는 것은 간단하다, 첫 번째 차원은 당신이 당신의 파일에있는 라인의 양이 될 것입니다.이 가변 배열은 각 위치에 배열을 가지고 기억

int[][] a = new int[amountOfLinesTxt][]; 

한 줄에 배열을 얻을 수 있기 때문에, 당신이해야 할 유일한 것은 예를 들어 특정 위치에 배열을 할당하는 것입니다

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray(); 
a[0] = array 

다른 줄에 대해서도 마찬가지입니다. 이제 당신은 당신이 당신의 내부 항목을 저장하는 데 필요한 다음 예를 int[,] a = new int[amountOfRowsTxt, amountofColumnsTxt];

의 크기를 구걸 읽고있는 동안 선에서 경우에 지정해야 양방향 차원 배열을 사용하려면

그것.

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray(); 

for(int i = 0; array.Length; i ++) 
{ 
    a[currentRow, i] = array[i]; 
} 

아이디어가 있습니까? 물론 Linq를 사용하여 결과를 얻는 더 좋은 방법이 있습니다. 이전 답변을 살펴보십시오. 희망이 도움이

관련 문제