private void FillRows(IList markingFields) { int countx = 1; if (markingFields.Count > 0) { TxtFieldDef prevTFD, currTFD = (TxtFieldDef)markingFields[0]; if (1 == currTFD.posBegin) { AddRow(currTFD.fieldName, 1, currTFD.posEnd); } else { AddRow(String.Format("x{0}", countx), 1, currTFD.posBegin - 1); countx++; AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd); } var i = 1; for (i = 1; i <= markingFields.Count - 1; i++) { prevTFD = (TxtFieldDef)markingFields[i - 1]; currTFD = (TxtFieldDef)markingFields[i]; if (currTFD.posBegin == prevTFD.posEnd + 1) { AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd); } else { AddRow(String.Format("x{0}", countx), prevTFD.posEnd + 1, currTFD.posBegin - 1); countx++; AddRow(currTFD.fieldName, currTFD.posBegin, currTFD.posEnd); } } var lastTFD = (TxtFieldDef)markingFields[i - 1]; if (lastTFD.posEnd < 255) { AddRow(String.Format("x{0}", countx), lastTFD.posEnd + 1, 255); } } else { AddRow("x1", 1, 255); } }
public static DataTable OpenPriceTable(string filePath, DataTableMarking dataTableMarking, PriceFormat?priceFormat, PriceEncode encode) { DataTable dataTablePrice = null; if (dataTableMarking.Rows.Count > 1) { var fields = new ArrayList(); for (var i = 0; i < dataTableMarking.Rows.Count; i++) { var row = dataTableMarking.Rows[i]; var fieldName = row["MNameField"].ToString(); var beginPosition = Convert.ToInt32(row["MBeginField"]); var endPosition = Convert.ToInt32(row["MEndField"]); fields.Add(new TxtFieldDef(fieldName, beginPosition, endPosition)); } fields.Sort(new TxtFieldDef()); var schemaFile = Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar + "Schema.ini"; using (var w = new StreamWriter(schemaFile, false, Encoding.GetEncoding(1251))) { w.WriteLine("[" + Path.GetFileName(filePath) + "]"); w.WriteLine(((priceFormat == PriceFormat.FixedWIN) || (priceFormat == PriceFormat.NativeFixed && encode == PriceEncode.Cp1251)) ? "CharacterSet=ANSI" : "CharacterSet=OEM"); w.WriteLine("Format=FixedLength"); w.WriteLine("ColNameHeader=False"); w.WriteLine("MaxScanRows=300"); if (fields.Count > 0) { int j = 1; TxtFieldDef prevTFD, currTFD = (TxtFieldDef)fields[0]; if (1 == currTFD.posBegin) { w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd)); j++; } else { w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, "x", currTFD.posBegin - 1)); j++; w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1)); j++; } for (var i = 1; i <= fields.Count - 1; i++) { prevTFD = (TxtFieldDef)fields[i - 1]; currTFD = (TxtFieldDef)fields[i]; if (currTFD.posBegin == prevTFD.posEnd + 1) { w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1)); j++; } else { w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, "x", currTFD.posBegin - prevTFD.posEnd - 1)); j++; w.WriteLine(String.Format("Col{0}={1} Text Width {2}", j, currTFD.fieldName, currTFD.posEnd - currTFD.posBegin + 1)); j++; } } } else { w.WriteLine(String.Format("Col{0}=x1 Text Width {1}", 1, 255)); } } var connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text\"", Path.GetDirectoryName(filePath)); using (var connection = new OleDbConnection(connectionString)) { connection.Open(); var dataAdapter = new OleDbDataAdapter(String.Format("select * from {0}", Path.GetFileName(filePath).Replace(".", "#")), connection); dataTablePrice = new DataTable(); dataAdapter.SyncFill(dataTablePrice); if (dataTablePrice.Rows.Count == 0) { throw new Exception("При открытии файла таблица с полями прайс-листа оказалась пуста. Предположительно неверный формат или файл поврежден"); } } } return(dataTablePrice); }