Parsowanie tekstu do DataTable

0

Witam. Pisze mały edytor rozmieszczenia potworków na potrzeby mojego serwera lecz utknąłem w pewnym miejscu, bez waszej pomocy raczej się nie obejdzie. Więc, cały text do parsowania wygląda mniej więcej tak:

//[Mob]	[Map]	[Dis]	[SX]	[SY]	[EX]	[EY]	[Dir]	[Total]	[Description]
1
24	2	30	170	80	245	200	-1	30	//Worm
23	2	30	170	80	245	200	-1	10	//Hommerd
22	2	30	50	6	166	244	-1	40	//Ice Monster
23	2	30	50	6	166	244	-1	30	//Hommerd 

A teraz to co udało mi się skleić do kupki buszując po necie

        private void bWczytaj_Click(object sender, EventArgs e)
        {
            OpenFileDialog oknWczytaj = new OpenFileDialog();
            oknWczytaj.Filter = "Pliki textowe (txt)|*.txt";
            
            if (oknWczytaj.ShowDialog() == DialogResult.OK)
            {
                this.bWczytaj.BackgroundImage = global::MuOSystem.Properties.Resources.openok;
               
            }

            ExtractionHandler ParserSB = new ExtractionHandler(oknWczytaj.FileName);
            ParserSB.ExtractData();
           
        } 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.IO;

namespace MuOSystem
{
    public class ExtractionHandler
    {
        #region Properties
        public string FIleToExtract { get; set; }
        #endregion

        #region Constructor
        public ExtractionHandler() { }

        public ExtractionHandler(string filename) { this.FIleToExtract = filename; }
        #endregion 

       

        #region Extraction
        
        public DataSet ExtractData()
        {
            DataSet Spots = new DataSet();
            try
            {

                string line;


                System.IO.StreamReader file = new System.IO.StreamReader(this.FIleToExtract);

                Spots.Tables.Add(new DataTable("Npc"));
                Spots.Tables["Npc"].Columns.Add("ID", typeof(int));
                Spots.Tables["Npc"].Columns.Add("MonsterID", typeof(int));
                Spots.Tables["Npc"].Columns.Add("MapID", typeof(int));
                Spots.Tables["Npc"].Columns.Add("Distance", typeof(int));
                Spots.Tables["Npc"].Columns.Add("XPosition", typeof(int));
                Spots.Tables["Npc"].Columns.Add("YPosition", typeof(int));
                Spots.Tables["Npc"].Columns.Add("Dir", typeof(int));
                Spots.Tables["Npc"].PrimaryKey = new DataColumn[] { Spots.Tables["Npc"].Columns["ID"] };

                Spots.Tables.Add(new DataTable("Spot"));
                Spots.Tables["Spot"].Columns.Add("ID", typeof(int));
                Spots.Tables["Spot"].Columns.Add("MonsterID", typeof(int));
                Spots.Tables["Spot"].Columns.Add("MapID", typeof(int));
                Spots.Tables["Spot"].Columns.Add("Distance", typeof(int));
                Spots.Tables["Spot"].Columns.Add("XStartP", typeof(int));
                Spots.Tables["Spot"].Columns.Add("YStartP", typeof(int));
                Spots.Tables["Spot"].Columns.Add("XEndP", typeof(int));
                Spots.Tables["Spot"].Columns.Add("YEndP", typeof(int));
                Spots.Tables["Spot"].Columns.Add("Dir", typeof(int));
                Spots.Tables["Spot"].Columns.Add("TotalCount", typeof(int));
                Spots.Tables["Spot"].PrimaryKey = new DataColumn[] { Spots.Tables["Spot"].Columns["ID"] };
                
                Spots.Tables.Add(new DataTable("NormalMonster"));
                Spots.Tables["NormalMonster"].Columns.Add("ID", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("MonsterID", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("MapID", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("Distance", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("XPosition", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("YPosition", typeof(int));
                Spots.Tables["NormalMonster"].Columns.Add("Dir", typeof(int));
                Spots.Tables["NormalMonster"].PrimaryKey = new DataColumn[] { Spots.Tables["NormalMonster"].Columns["ID"] };
                
                Spots.Tables.Add(new DataTable("GoldenMonster"));
                Spots.Tables["GoldenMonster"].Columns.Add("ID", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("MonsterID", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("MapID", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("Distance", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("XStartP", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("YStartP", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("XEndP", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("YEndP", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("Dir", typeof(int));
                Spots.Tables["GoldenMonster"].Columns.Add("TotalCount");
                Spots.Tables["GoldenMonster"].PrimaryKey = new DataColumn[] { Spots.Tables["GoldenMonster"].Columns["ID"] };
                
                Spots.Tables.Add(new DataTable("BcGateOthers"));
                Spots.Tables["BcGateOthers"].Columns.Add("ID", typeof(int));
                Spots.Tables["BcGateOthers"].Columns.Add("MonsterID", typeof(int));
                Spots.Tables["BcGateOthers"].Columns.Add("MapID", typeof(int));
                Spots.Tables["BcGateOthers"].Columns.Add("Distance", typeof(int));
                Spots.Tables["BcGateOthers"].Columns.Add("XPosition", typeof(int));
                Spots.Tables["BcGateOthers"].Columns.Add("YPosition", typeof(int));
                Spots.Tables["BcGateOthers"].PrimaryKey = new DataColumn[] { Spots.Tables["BcGateOthers"].Columns["ID"] };
                
                while ((line = file.ReadLine()) != null)
                {
                    char[] delimiterChars = { ' ', '\t' };
                    
                            if (!string.IsNullOrEmpty(line.Trim()))
                            {
                                if (line.StartsWith("//"))
                                {
                                        if (line.StartsWith("1") && line.Length <= 2)
                                        {
                                            line.Trim();
                                            string[] values = line.Split(delimiterChars);

                                            
                                            Spots.Tables["Npc"].Rows.Add(0, values[0], values[1], values[2], values[3], values[4], values[5], values[6]);
                                           
                                            Spots.AcceptChanges();

                                        }

                                }
                            }
                   
                    
                 }

                file.Close();
            }
            catch (Exception ex) { }
   
            Spots.WriteXml("aaa.xml");
            return Spots;
        }
        #endregion
    }
} 

Wartości z row maja iść do dalszej obróbki, na potrzeby przetestowania metody jest zapis do xml który nie działa(tworzy plik na max 2 linijki). Proszę o pomoc:D

0

Te linijki chyba powinny wyglądać tak:

                            if (!line.StartsWith("//"))
                            {
                                    if (!line.StartsWith("1") && line.Length <= 2)
                                    {

albo żeby było ładniej to tak:

if(!line.StartsWith("//") && (!line.StartsWith("1") && line.length <=2))

Albo po prostu pominąć parsowanie 2 pierwszych linijek

1 użytkowników online, w tym zalogowanych: 0, gości: 1