/// <summary> /// INSERT文を出力. /// </summary> /// <param name="Writer">ストリーム</param> /// <param name="TableName">テーブル名</param> private void WriteInsert(StreamWriter Writer, string TableName) { for (int Sheet = 0; Sheet < Master.SheetCount; Sheet++) { for (int i = 0; ; i++) { string Line = "INSERT INTO `" + TableName + "` VALUES ("; bool bFinished = false; if (Master.IsMultipleSheet) { Line += Sheet + ","; } var Columns = Master.GetColumns(Sheet); foreach (Column Col in Columns) { if (i >= Col.DataList.Count) { bFinished = true; break; } string Data = Col.DataList[i].ToString(); int EnumValue = 0; if (Col.DataType == Type.String) { Data = "'" + Data + "'"; } else if (Master.TryFindEnumValue(Data, out EnumValue)) { Data = EnumValue.ToString(); } Line += Data; Line += ","; } if (bFinished) { break; } Line = Line.Substring(0, Line.Length - 1); Line += ");"; Writer.WriteLine(Line); } } }
/// <summary> /// 生成. /// </summary> /// <returns>成功したらtrueを返す</returns> public bool Generate() { try { string FilePath = Config.TemporaryDirectoryPath + "\\" + MasterName + ".bin"; FileStream WriteStream = new FileStream(FilePath, FileMode.Create); using (BinaryWriter BinWriter = new BinaryWriter(WriteStream)) { // シート数. { byte[] Bytes = BitConverter.GetBytes(Master.SheetCount); if (BitConverter.IsLittleEndian) { Bytes = Bytes.Reverse().ToArray(); BinWriter.Write(Bytes); } } for (int Sheet = 0; Sheet < Master.SheetCount; Sheet++) { var Columns = Master.GetColumns(Sheet); // カラム数. { byte[] Bytes = BitConverter.GetBytes(Columns[0].DataList.Count); if (BitConverter.IsLittleEndian) { Bytes = Bytes.Reverse().ToArray(); BinWriter.Write(Bytes); } } for (int i = 0; i < Columns[0].DataList.Count; i++) { for (int j = 0; j < Columns.Count; j++) { byte[] Bytes = null; double Data = 0.0; if (Columns[j].DataType != Type.String) { int EnumValue = 0; if (Master.TryFindEnumValue(Columns[j].DataList[i].ToString(), out EnumValue)) { Data = EnumValue; } else { Data = (double)Columns[j].DataList[i]; } } switch (Columns[j].DataType) { case Type.s8: // @HACK:負数ブチ込んだ時に問題起きる気がする・・・ Bytes = new byte[1]; Bytes[0] = (byte)Data; break; case Type.u8: Bytes = new byte[1]; Bytes[0] = (byte)Data; break; case Type.s16: Bytes = BitConverter.GetBytes((short)Data); break; case Type.u16: Bytes = BitConverter.GetBytes((ushort)Data); break; case Type.s32: Bytes = BitConverter.GetBytes((int)Data); break; case Type.u32: Bytes = BitConverter.GetBytes((uint)Data); break; case Type.Float: Bytes = BitConverter.GetBytes((float)Data); break; case Type.String: string Str = (string)Columns[j].DataList[i]; int StrSize = Encoding.UTF8.GetByteCount(Str); byte[] SizeBytes = BitConverter.GetBytes(StrSize); if (BitConverter.IsLittleEndian) { SizeBytes = SizeBytes.Reverse().ToArray(); } BinWriter.Write(SizeBytes); Bytes = Encoding.UTF8.GetBytes(Str).Reverse().ToArray(); break; } if (BitConverter.IsLittleEndian) { Bytes = Bytes.Reverse().ToArray(); } BinWriter.Write(Bytes); } } } } } catch { return(false); } return(true); }