using System;
using System.Collections;
using System.IO;
using System.Text;
//
using CNEE.Framework.VR;
using CNEE.IF.VCY.Entity3D;
//
namespace CNEE.IF.VCY
{
/// <summary>
/// SaveYardBoxInfo 的摘要说明。保存堆场数据(文本方式保存与读取)
/// </summary>
[Serializable]
public class SaveOrReadYardBoxInfo
{
public SaveOrReadYardBoxInfo()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 读取轮船箱子信息(贝,行,层,集装箱类型1/2),返回轮船箱子信息动态数组,不是连接数据库文件
/// </summary>
/// <returns></returns>
public static IList readVessileBoxInfo(string fpath)
{
//--------------------------------------------------
//public struct ContainerInVesselDefinition
//{
//废弃public int duan; //由这个的行号分解为轮船上的段+行
// public int Bay; // 集装箱在船上的贝号
// public int Slot; // 集装箱在船上的行号
// public int Tier; // 集装箱在船上的层号
// public int Type; // 轮船的集装箱类型,从1开始。不同类型的集装箱有不同的外观,当前只有两种类型,1或者2。
//}
//-------------------------------------------------------------
if(fpath==String.Empty||!File.Exists(fpath))//或者不存在的时候
fpath=System.Windows.Forms.Application.StartupPath+@"/VessileBoxInfoSave/VessileBoxInfo_moren.dat";//这里要自己去选
StreamReader sr=new StreamReader(fpath,Encoding.Default);
IList readVessilebox=new ArrayList();
try
{
while(sr.Peek()!=-1)
{
//读取文件,分割成4个数组
string readline=sr.ReadLine();
char[]dotArray={','};
string[]yardboxArray=readline.Split(dotArray);
//
ContainerInVesselDefinition cinfo;//=new ContainerInVesselDefinition();
cinfo.Bay=Convert.ToInt32(yardboxArray[0]);
cinfo.Slot=Convert.ToInt32(yardboxArray[1]);
cinfo.Tier=Convert.ToInt32(yardboxArray[2]);
cinfo.Type=Convert.ToInt32(yardboxArray[3]);
readVessilebox.Add(cinfo);
}
//sr.Close();
}
catch{}
finally{sr.Close();}
return readVessilebox;
}
/// <summary>
/// 读取演示程序的卡车装卸车的任务
/// </summary>
/// <param name="fpath"></param>
/// <returns></returns>
public static int[] readTrucktask(string fpath)
{
//if(fpath==String.Empty||!File.Exists(fpath))//或者不存在的时候
//fpath=System.Windows.Forms.Application.StartupPath+@"/task/unloadtruck.dat";//这里要自己去选
StreamReader sr=new StreamReader(fpath,Encoding.Default);
//IList readVessilebox=new ArrayList();
int[] trucktask=new int[4];
try
{
while(sr.Peek()!=-1)
{
//读取文件,分割成4个数组
string readline=sr.ReadLine();
char[]dotArray={','};
string[]yardboxArray=readline.Split(dotArray);
//
//ContainerInVesselDefinition cinfo;//=new ContainerInVesselDefinition();
trucktask[0]=Convert.ToInt32(yardboxArray[0]);
trucktask[1]=Convert.ToInt32(yardboxArray[1]);
trucktask[2]=Convert.ToInt32(yardboxArray[2]);
trucktask[3]=Convert.ToInt32(yardboxArray[3]);
//readVessilebox.Add(cinfo);
}
sr.Close();
return trucktask;
}
catch{sr.Close();return trucktask;}
//return trucktask;
}
/// <summary>
/// 保存指定轮船编号箱子信息(贝,行,层,箱子类型1或者2),不是连接数据库
/// </summary>
/// <param name="i"></param>
public static void saveVessileboxInfo(int i)
{
string fpath=System.Windows.Forms.Application.StartupPath+@"/VessileBoxInfoSave/vessilebox"+i.ToString()+DateTime.Now.ToString().Replace(":","_")+".dat";
IList vessileBoxinfo=new ArrayList();
foreach(Vehicle v in Globals.Scene.reVehiclelist())
{
if(v.Vehicle_Id==i)
{
vessileBoxinfo=v.Container20_sinfo;
}
}
StreamWriter sw =new StreamWriter(fpath,false,Encoding.Default);
foreach(ContainerInfo c in vessileBoxinfo)
{
//贝,行,层,箱子类型1或者2
string theBoxInfo=c.VBay.ToString()+","+c.VRow.ToString()+","+c.VLevel.ToString()+","+c.ContainerType.ToString();
sw.WriteLine(theBoxInfo);
}
sw.Flush();
sw.Close();
}
/// <summary>
/// 保持string动态数组的数据xml.dat
/// </summary>
/// <param name="array"></param>
public static void saveIList(IList array, string filename)
{
string fpath="";
if(filename==string.Empty)
fpath="xml.dat";
if(filename!=string.Empty)
fpath=filename+".dat";
StreamWriter sw =new StreamWriter(fpath,false,Encoding.Default);
foreach(string str in array)
{
//string wr;
//wr=str.Substring(0,str.Length-2);
//wr.Replace("System.Byte[]","");
sw.WriteLine(str);
}
sw.Flush();
sw.Close();
}
/// <summary>
/// 保存一行String 数据到指定的文件中(文件名file_save_Columnsname.txt)
/// </summary>
/// <param name="str"></param>
/// <param name="file_save_Columnsname"></param>
public static void saveString(string str,string file_save_Columnsname)
{
string fpath="";
if(file_save_Columnsname==string.Empty)
fpath=@"xml.txt";
if(file_save_Columnsname!=string.Empty)
fpath=file_save_Columnsname+".txt";
StreamWriter sw =new StreamWriter(fpath,false,Encoding.Default);
sw.WriteLine(str);
sw.Flush();
sw.Close();
}
/// <summary>
/// 保存堆场箱子(结构体)信息,不是连接数据库文件
/// </summary>
public static void saveYardboxInfo()
{
//创建文件
//FileInfo finfo = new FileInfo("YardBoxInfoSave//YardBoxInfo.dat");
//if (!finfo.Exists)
//{
// finfo.Create();
//
//}
//else
//{
// finfo.Delete();
// finfo.Create();//会出错?为什么?
//}
//finfo.Refresh();
//finfo.AppendText();
string fpath=System.Windows.Forms.Application.StartupPath+@"/YardBoxInfoSave/YardBoxInfo"+DateTime.Now.ToString().Replace(":","_")+".dat";
StreamWriter sw =new StreamWriter(fpath,false,Encoding.Default); //finfo.AppendText();
//
IList yardboxinfo=new ArrayList();
yardboxinfo.Clear();
yardboxinfo=Globals.Scene.reYardboxInfo();
foreach(ContainerInfo c in yardboxinfo)
{
//开始保存数据
//区,段,贝,行,层,箱子类型1或者2
int duan=yardsectionIDto_Duan(c.YardSectionid);
int site=yardsectionIdto_Site(c.YardSectionid);
string theBoxInfo= site.ToString()+","+duan.ToString()+","+c.YardBay.ToString()+","+c.YardRow.ToString()+","+c.YardLevel.ToString()+","+c.ContainerType.ToString();
sw.WriteLine(theBoxInfo);
}
sw.Flush();
sw.Close();
}
/// <summary>
/// 读取堆场箱子信息(返回所有箱子的(结构体)动态数组),不是连接数据库文件
/// </summary>
public static IList readYardboxInfo(string fpath)
{
if(!Directory.Exists("task"))
Directory.CreateDirectory("task");
if(fpath==String.Empty||!File.Exists(fpath))
fpath=System.Windows.Forms.Application.StartupPath+@"/YardBoxInfoSave/YardBoxInfo.dat";
StreamReader sr=new StreamReader(fpath,Encoding.Default);
IList readyardbox=new ArrayList();
ContainerInYardDefinition cinfo;
try
{
while(sr.Peek()!=-1)
{
//读取文件,分割成5个数组
string readline=sr.ReadLine();
char[]dotArray={','};
string[]yardboxArray=readline.Split(dotArray);
//
//ContainerInfo cinfo=new ContainerInfo();
//cinfo.the_one_ids=Convert.ToInt32(yardboxArray[0]);//唯一编号,最大到1456
//唯一编号以堆场为主!
//cinfo.Id=Convert.ToInt32(yardboxArray[1]);
//cinfo.Name="C20X";
//cinfo.GantryB=i;
cinfo.SubArea=Convert.ToInt32(yardboxArray[0]);
cinfo.Lane=Convert.ToInt32(yardboxArray[1]);
//cinfo.Code="C20-"+cinfo.YardSectionid.ToString();
//cinfo.LocType=LocationType.Yard;
cinfo.Bay=Convert.ToInt32(yardboxArray[2]);
cinfo.Row=Convert.ToInt32(yardboxArray[3]);
cinfo.Tier=Convert.ToInt32(yardboxArray[4]);
cinfo.Type=Convert.ToInt32(yardboxArray[5]);
//区,段,贝,行,层,箱子类型1或者2
readyardbox.Add(cinfo);
}
//sr.Close();
//return readyardbox;
}
catch{}
finally{sr.Close();}
return readyardbox;
}
private static int yardsectionIdto_Site(int siteID)
{
if(siteID>=0&&siteID<13)
return 4;
else if(siteID>=13&&siteID<26)
return 3;
else if(siteID>=26&&siteID<39)
return 2;
else if(siteID>=39)
return 1;
return -1;
}
private static int yardsectionIDto_Duan(int siteId)
{
int id=siteId%13;
return id+1;
}
private static int quduan_toYardid(int site,int duan)
{
int yardid=(4-site)*13+duan-1;
return yardid;
}
}
}