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