运行的时候提示提示数据索引超出组界,一直都没解决问题,请求帮忙!
namespace GPSAnalyst.SE
{
public class SectionsCombine
{
readonly int _interval;
readonly int _nDelay;
public static MEG_RI_ROAD_Ety[] _roadcombine = null;
static Dictionary<int, LinkGroup> _dicLinkGroup = null;
static public DateTime? Begintime = null; public SectionsCombine(int intvl, int delay)
{
_interval = intvl;
_nDelay = delay;
} public void LinkCombine()
{
//装载路段信息
if (_roadcombine == null || _dicLinkGroup == null)
{
//组合道路由外部赋值
//SpeedEstimateDaoImpl.GetOriginalRoadData<MEG_RI_ROAD_Ety>(out _roadcombine);//从数据库获取需要组合的路段
#region 需要重新组合的路段存放在dicLinkGroup的数据结构中
_dicLinkGroup = new Dictionary<int, LinkGroup>();//<组合路id 组合路的属性>
for (int i = 0; i < _roadcombine.Length; i++)//共有多少主干路
{
Console.WriteLine("LinkGroup[{0}]",i);
LinkGroup linkgroup = new LinkGroup();//一条主干道
List<CarLinkInfo_Ety> roadinfo = new List<CarLinkInfo_Ety>();//一条主干道下的小路径 if (_roadcombine[i].SUBSECTIONS == null)
continue; string[] links = _roadcombine[i].SUBSECTIONS.Split('/');//一条主干路下的小路径集合
for (int j = 0; j < links.Length; j++)//一条主干路由多少小路径组成
{
string[] link = links[j].Split('-');//一条小路径的fnode tnode maplength
var smallroad = new CarLinkInfo_Ety();//出租车在link上定位点信息,包括fnode tnode maplength
smallroad.FNODE = Convert.ToInt16(link[0]);
smallroad.TNODE = Convert.ToInt16(link[1]);
smallroad.MAPLENGTH = Convert.ToInt16(link[2]);
roadinfo.Add(smallroad);
} linkgroup.id = _roadcombine[i].ID;
linkgroup.roadid = _roadcombine[i].ARCID;
linkgroup.LinkGroupName = _roadcombine[i].NAME;//组合后路段的名称
linkgroup.FromNode = _roadcombine[i].FNODE;//组合后路段的fnode
linkgroup.ToNode = _roadcombine[i].TNODE;//组合后路段的tnode
linkgroup.roadtype = _roadcombine[i].TYPE;
linkgroup.links = roadinfo;//组合后路段的小路段link的信息
_dicLinkGroup.Add(linkgroup.id, linkgroup);
}
我找到的问题是标了颜色的,
最开始是在(按钮事件代码)
rivate void BtnStartBySEClick(object sender, EventArgs e)
{var sheetName = Path.GetFileNameWithoutExtension(tbxFileSrcPath.Text);
var att = Path.GetExtension(tbxFileSrcPath.Text);
if (att != ".csv")
{
sheetName = "Sheet1";
}
//tbxSheetName.Text = sheetName;
var filehelper1 = new FileHelper(tbxFileSrcPath.Text);
var objs1 = filehelper1.GetDataSet(sheetName, (att ==
".csv")).Tables[0];//try
// {
var dataSources = RDBC.Base.ChangTypeHelper.Convert.ToList<SE.Entity.FCD_MM_GPS_Ety>(objs1);
var ramdon = new Random();
foreach (var fcdMmGpsEty in dataSources)
{
fcdMmGpsEty.SPEED = ramdon.Next(15,35);
//fcdMmGpsEty.SPEED = 0; }
sheetName = Path.GetFileNameWithoutExtension(tbxRoadFilePath.Text);
att = Path.GetExtension(tbxRoadFilePath.Text);
if (att != ".csv")
{
sheetName = "Sheet1";
}
//tbxSheetName.Text = sheetName; var filehelper2 = new FileHelper(tbxRoadFilePath.Text);
var objs2 = filehelper2.GetDataSet(sheetName, (att ==
".csv")).Tables[0];
List<MEG_RI_ROAD_Ety> roadcombine = FileHelper.GetEntities<MEG_RI_ROAD_Ety>(objs2).ToList();
//RDBC.Base.ChangTypeHelper.Convert.ToList<MEG_RI_ROAD_Ety>(objs2); //下面是新的计算赋值逻辑
SE.PlData.ReSet();
SE.PlData.FcdMmGpsEties.AddRange(dataSources.ToArray());
SE.PlData.MegRiRoadEties.AddRange(roadcombine);
SE.Service.CaculateSevice.Default.BizLoop(roadcombine,dataSources);
dgvDemo.DataSource = SE.PlData.FcdSEResultEties;
// }
/* catch (Exception ex)
{
MessageBox.Show(ex.Message);
}*/
} private void btnOutTable_Click(object sender, EventArgs e)
{
//var table = (DataTable)dgvDemo.DataSource;
var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[]{"csv"});
if (dgvDemo.DataSource is DataTable)
{
var table = (DataTable)dgvDemo.DataSource;
FileHelper.ExportToSvc(table, filesaveName);
}
else
{
FileHelper.ExportToSvc(dgvDemo,filesaveName);
} } private void btnOutCombine_Click(object sender, EventArgs e)
{
var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[] { "csv" });
FileHelper.Save2Csv(SE.PlData.FcdCombineGpsEties.ToArray(), filesaveName); }
}
}
请教众人讨论未果,请帮帮忙
namespace GPSAnalyst.SE
{
public class SectionsCombine
{
readonly int _interval;
readonly int _nDelay;
public static MEG_RI_ROAD_Ety[] _roadcombine = null;
static Dictionary<int, LinkGroup> _dicLinkGroup = null;
static public DateTime? Begintime = null; public SectionsCombine(int intvl, int delay)
{
_interval = intvl;
_nDelay = delay;
} public void LinkCombine()
{
//装载路段信息
if (_roadcombine == null || _dicLinkGroup == null)
{
//组合道路由外部赋值
//SpeedEstimateDaoImpl.GetOriginalRoadData<MEG_RI_ROAD_Ety>(out _roadcombine);//从数据库获取需要组合的路段
#region 需要重新组合的路段存放在dicLinkGroup的数据结构中
_dicLinkGroup = new Dictionary<int, LinkGroup>();//<组合路id 组合路的属性>
for (int i = 0; i < _roadcombine.Length; i++)//共有多少主干路
{
Console.WriteLine("LinkGroup[{0}]",i);
LinkGroup linkgroup = new LinkGroup();//一条主干道
List<CarLinkInfo_Ety> roadinfo = new List<CarLinkInfo_Ety>();//一条主干道下的小路径 if (_roadcombine[i].SUBSECTIONS == null)
continue; string[] links = _roadcombine[i].SUBSECTIONS.Split('/');//一条主干路下的小路径集合
for (int j = 0; j < links.Length; j++)//一条主干路由多少小路径组成
{
string[] link = links[j].Split('-');//一条小路径的fnode tnode maplength
var smallroad = new CarLinkInfo_Ety();//出租车在link上定位点信息,包括fnode tnode maplength
smallroad.FNODE = Convert.ToInt16(link[0]);
smallroad.TNODE = Convert.ToInt16(link[1]);
smallroad.MAPLENGTH = Convert.ToInt16(link[2]);
roadinfo.Add(smallroad);
} linkgroup.id = _roadcombine[i].ID;
linkgroup.roadid = _roadcombine[i].ARCID;
linkgroup.LinkGroupName = _roadcombine[i].NAME;//组合后路段的名称
linkgroup.FromNode = _roadcombine[i].FNODE;//组合后路段的fnode
linkgroup.ToNode = _roadcombine[i].TNODE;//组合后路段的tnode
linkgroup.roadtype = _roadcombine[i].TYPE;
linkgroup.links = roadinfo;//组合后路段的小路段link的信息
_dicLinkGroup.Add(linkgroup.id, linkgroup);
}
我找到的问题是标了颜色的,
最开始是在(按钮事件代码)
rivate void BtnStartBySEClick(object sender, EventArgs e)
{var sheetName = Path.GetFileNameWithoutExtension(tbxFileSrcPath.Text);
var att = Path.GetExtension(tbxFileSrcPath.Text);
if (att != ".csv")
{
sheetName = "Sheet1";
}
//tbxSheetName.Text = sheetName;
var filehelper1 = new FileHelper(tbxFileSrcPath.Text);
var objs1 = filehelper1.GetDataSet(sheetName, (att ==
".csv")).Tables[0];//try
// {
var dataSources = RDBC.Base.ChangTypeHelper.Convert.ToList<SE.Entity.FCD_MM_GPS_Ety>(objs1);
var ramdon = new Random();
foreach (var fcdMmGpsEty in dataSources)
{
fcdMmGpsEty.SPEED = ramdon.Next(15,35);
//fcdMmGpsEty.SPEED = 0; }
sheetName = Path.GetFileNameWithoutExtension(tbxRoadFilePath.Text);
att = Path.GetExtension(tbxRoadFilePath.Text);
if (att != ".csv")
{
sheetName = "Sheet1";
}
//tbxSheetName.Text = sheetName; var filehelper2 = new FileHelper(tbxRoadFilePath.Text);
var objs2 = filehelper2.GetDataSet(sheetName, (att ==
".csv")).Tables[0];
List<MEG_RI_ROAD_Ety> roadcombine = FileHelper.GetEntities<MEG_RI_ROAD_Ety>(objs2).ToList();
//RDBC.Base.ChangTypeHelper.Convert.ToList<MEG_RI_ROAD_Ety>(objs2); //下面是新的计算赋值逻辑
SE.PlData.ReSet();
SE.PlData.FcdMmGpsEties.AddRange(dataSources.ToArray());
SE.PlData.MegRiRoadEties.AddRange(roadcombine);
SE.Service.CaculateSevice.Default.BizLoop(roadcombine,dataSources);
dgvDemo.DataSource = SE.PlData.FcdSEResultEties;
// }
/* catch (Exception ex)
{
MessageBox.Show(ex.Message);
}*/
} private void btnOutTable_Click(object sender, EventArgs e)
{
//var table = (DataTable)dgvDemo.DataSource;
var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[]{"csv"});
if (dgvDemo.DataSource is DataTable)
{
var table = (DataTable)dgvDemo.DataSource;
FileHelper.ExportToSvc(table, filesaveName);
}
else
{
FileHelper.ExportToSvc(dgvDemo,filesaveName);
} } private void btnOutCombine_Click(object sender, EventArgs e)
{
var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[] { "csv" });
FileHelper.Save2Csv(SE.PlData.FcdCombineGpsEties.ToArray(), filesaveName); }
}
}
请教众人讨论未果,请帮帮忙
smallroad.TNODE = Convert.ToInt16(link[1]);
smallroad.MAPLENGTH = Convert.ToInt16(link[2]);
roadinfo.Add(smallroad);
==>
link有三个元素吗
你把 link的长度输出看看, 这个数组是不是有三个元素
{
Console.WriteLine("LinkGroup[{0}]",i);
LinkGroup linkgroup = new LinkGroup();//一条主干道
List<CarLinkInfo_Ety> roadinfo = new List<CarLinkInfo_Ety>();//一条主干道下的小路径
猜测 是不是这里要.length -1 还有下边的j循环的时候