2013-06-18 3 views
0

저는 새로운 프로그래머이며 많은 것을 끝내는 데 도움이되는 작은 프로그램을 만들려고합니다.텍스트의 특정 데이터를로드하고 DataGridview에 넣습니다.

어떻게 생겼습니까?

이 텍스트 파일의 데이터를 포맷하는 방법입니다

**;======================= Start** 

(item (name 256)  (Index 1) (Image "Wea001") (Action 1 1) (class 
weapon sword) (code 1 1 1 1) (country 2) (level 1) (wear 
1)         (limit Knight 1) (range 16) (buy 4) (sell 1) (endurance 
4)    (specialty (aspeed 700)      (Attack 3 10)     (hit 15)                         )        ) 

**;======================== end** 

나는의 (이름 옆에 번호)를 가져옵니다 (인덱스 옆에 번호) 및 (이미지 옆에 이름)가 필요합니다.

사용자가 열린 파일 대화 상자에서 텍스트 파일을로드하면 3 개의 열에 내가 도움을 요청하는 3 개의 필드가 표시됩니다.

는 사람은 DataGridView를로드 텍스트 파일로 저에게 데이터를 코드의 예를 보여줄 수 있습니까? 나는 사용하고있다 vb.net

+0

** 이름 256 ** .. 텍스트 크기 = 256 .. 의미 ** 어택 3 10 **? – matzone

+0

파일의 형식을 제어 할 수있는 경우 구문 분석이 어려울 수 있으므로 더 나은 형식을 고안하는 것이 좋습니다. 아마도 CSV 형식 또는 JSON (JSON의 가난한 사람 버전처럼 보일 수도 있지만 100 % 확실성을 말하면 JSON에 익숙하지 않습니다). – Tim

답변

1

다음은 기존 형식을 사용하는 방법입니다. 이것은 데이터 테이블을 사용하여 데이터를 포함하고 datagridview의 데이터 소스로 사용됩니다. 올바른 라인을 검색 한 다음 닫는 괄호 )으로 라인을 분할 한 다음 각 부분을 공백으로 분리하여 데이터를 추출합니다. )에 의해

Imports System.IO 
Public Class Form1 
    Dim dt As New DataTable 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim sr As New StreamReader("InitItem.txt") 
     Dim DataString As String = "" 
     Dim ImageIndex As Integer = 2 
     dt.Columns.AddRange({New DataColumn("Name"), New DataColumn("Index"), New DataColumn("Image")}) 
     While Not sr.EndOfStream 
      DataString = sr.ReadLine 
      If DataString.Contains("(item") Then 
       Dim ParseData() As String = DataString.Split(")"c) 
       If (ParseData(ImageIndex).Contains("desc")) Then 
        ImageIndex = 3 
       End If 
       AddNewRow(ParseData, ImageIndex) 
      End If 
     End While 
     DataGridView1.DataSource = dt 
    End Sub 
    Private Sub AddNewRow(ParseData() As String, ImageIndex As Integer) 
     Dim TempRow As DataRow = dt.NewRow 
     TempRow.ItemArray = {ParseData(0).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1), _ 
          ParseData(1).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1), _ 
          ParseData(ImageIndex).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1).Trim(""""c)} 
     dt.Rows.Add(TempRow) 
    End Sub 
End Class 

분할은 보장 우리가 우리가 문자열이 끝까지 회에 )이 없음을, 공간으로 분할 한 후 데이터를 추출 할 때.

텍스트 파일 형식이 모든 곳에서 사용 되었기 때문에 요청한 데이터에 맞게이 코드를 만들었습니다. 이미 언급했듯이 좀 더 일반적인 것을 원한다면 파일에 대한 표준 형식을 고려해야합니다. 많은 데이터가있는 것 같지 않으므로 각 행에 필드/값 쌍을 제안합니다.

+0

우선이 위대하고 빠른 답변과 코드에 대해 너무 감사드립니다. 두 번째 나는이 코드를 시도하지만 깨끗한 DataGrid 뷰를 얻었습니다. ( 왜 데이터가 없는지 제발 말해 주시겠습니까? 3 번 편집자 나 다른 사람의 도움이 필요하거나 다른 도움이 필요하지만 텍스트 확장 만 사용하십시오 덕분에 다시 한번 도움을 청하고 관리자로부터 첫 번째 게시물을 편집하십시오 –

+0

열을 추가 했습니까? 텍스트 파일의 형식이 표시된 것과 똑같습니까? dt.Rows.Add (TempRow)'에 중단 점을 설정하십시오. TempRow에 어떤 데이터가 있는지 ParseData에 어떤 데이터가 있는지 확인하십시오. 올바른 데이터를 얻으려면 TempRow.ItemArray 문에서 다른 인덱스를 시도해야 할 수도 있습니다. 내 코드가 표시된 샘플로 테스트되었습니다. 차이가 있으면 실제 형식으로 이에 따라 코드를 조정해야합니다. – tinstaafl

+0

안녕하세요,이 텍스트 파일을 요청하고 내가 시도한 모든 데이터가 포함 된 데이터 파일의 복사본입니다. 그것에 대한 프로그램을 만들려면 여기에서 다운로드 할 수 있습니다. http://www.mediafire.com/?b93qewbc5cikh7b –

관련 문제