2013-10-28 2 views
1

안녕하세요, 좋은 소식이 있습니다. 내가해야 할 일을 잘 이해하고 있습니다. 나중에 사용할 수있는 많은 데이터를 보았습니다. 하지만 지금 당장은 좀 더 많거나 적게이 과정을 재교육해야합니다.vb 2010의 배열에 요소를 추가하는 방법

배열에 요소를 써야합니다. 나는 그 부분의 종류를 알고 .....하지만 XML 파일을 실행할 때까지 배열 길이를 알 수 없습니다. 따라서 파일은 1에서 9000 (dbz) 이상일 수 있습니다. 나는 for 루프가 필요할 것이라는 것을 안다. for 루프를 잘 작성하는 법을 모른다.

나는이 책에서 코드를 얻었지만 이것을 어떻게 편집 할 수 있는지 보지 못했다.

Dim arraytester() As String 
For i As Integer = 0 To arraytester.Length - 1 
    'little lost here 
Next 

그래서 내가 어떻게 내가 작업하고있는 파일 오전의 길이를 모르는 경우 arraytester.Length이 문제가되고 주위에 얻을 것입니다.

어떻게 배열에 추가하겠습니까? 내 책에는 출력 만 표시됩니다. 이 시도

+1

을'ArrayList의 사용을 고려 '('myAL.Add (thing)'); 이후에 그것을 변환 :'arraytester = myAL.ToArray'. 배열보다 NET에 더 많은 컬렉션이있다. – Plutonix

+1

'List (Of String)'과'.Add()'메서드를 사용할 수 있습니까? 그러면 그 길이는 무의미해진다. –

+0

배열을 사용해야하는 클래스입니까? – dbasnett

답변

7

을 (또는 어쩌면 난 그냥 손실 AM) :

Dim mylist As New List(Of String) 
Using document As XmlReader = XmlReader.Create("c:\PathToYourXmlFile.xml") 
    While (document.Read()) 
     mylist.Add(document.ReadInnerXml.ToString) 
    End While 
End Using 

당신이 While 루프 구조를 사용하고 있기 때문에, 당신은 XML 파일에 포함 된 항목의 양을 알 필요가 없습니다 당신은하지 않습니다 List(Of String)이 필요에 따라 커지기 때문에 배열의 치수를 재 지정하거나 치수를 재조정해야합니다.

참고 : .NET 2.0 이상의 일반 데이터 구조는 배열 구조 및 .NET 1.x ArrayList 데이터 구조보다 더 효율적이고 쉽게 작업 할 수 있습니다. 이제 mylist을 통해 루프를 원하는 경우

, 당신은이 작업을 수행 할 수 있습니다

For Each item As String In mylist 
    MessageBox.Show(item) 
Next 
+0

+1 일반 목록 사용. – Neolisk

+0

-1'New XmlTextReader()'와'using' 블록에 대해서는 -1입니다. –

+0

@JohnSaunders -'Using' 블록을 사용하도록 업데이트되었습니다. –

3

가 VB (ReDim 참조)에 배열의 크기를 조정하는 방법이 있지만 당신은 수집 한 때까지이 System.Collections.Generic.List(Of String)를 사용하는 것이 아마 더 낫다 모든 요소 (배열에서 원하는 모든 요소 유형으로 String을 바꿀 수 있음)를 가져온 다음 배열로 변환해야 할 경우 결과를 배열로 변환 할 수 있습니다.

Dim arraytester() As String 
Dim accumulator As New System.Collections.Generic.List(Of String) 
Do While Not input.EndOfStream 
    accumulator.Add(input.ReadLine()) 
Loop 
arraytester = accumulator.ToArray() 

이 전체 어레이 요소가 추가 될 때마다 재 할당되어야 할 것이기 때문에, 각 요소를 추가 어레이를 리사이징 아닌 권장된다. 당신은 LINQ를 사용하는 경우

1

이 된 XMLNodes의 컬렉션을 구축하고 배열의 상한을 모른 채 배열로 캐스팅 할 수 있습니다 할당 지침이 얼마나 특정에 따라

Dim xdoc As New Xml.XmlDocument() 
    xdoc.Load("test1.xml") 
    Dim nodes() As Xml.XmlNode = (From var In xdoc.SelectNodes("doc/members/member") 
            Let node = DirectCast(var, Xml.XmlNode) 
           Select node).ToArray 
+0

왜 LINQ를 사용 하겠지만 XDocument가 아닌'XmlDocument'를 사용해야합니까? –

+0

나는 그것을 사용할 것이지만 나는 LINQ를 경험하지 못했다. 그리고 나는이 수업에 사용할 수 없다. : ( –

+0

@ HankBates : 나는 tinstaafl을 물었다. –

관련 문제