Сплит длинные строки каждые 255 символов - PullRequest
0 голосов
/ 09 февраля 2012

Я хочу разбить столбец qc каждые 255 символов на несколько строк, а затем объединить их вместе, когда я вставлю их в Excel. Я перепробовал все, что мог придумать, я знаю, что это глупо, но я подумал, что спрошу, но как мне поступить? Это мой код вставки. Спасибо!

string lFilename = "myExcel.xls";
string lDistributorFolder = Server.MapPath(".") + "\\Portals\\0\\Distributors\\" + _currentUser.UserID.ToString() + "\\";
string lTemplateFolder = System.Configuration.ConfigurationManager.AppSettings["CPCeCommerceTemplates"];
System.IO.Directory.CreateDirectory(lDistributorFolder);

File.Copy(lTemplateFolder + lFilename, lDistributorFolder + lFilename, true);
string lConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + lDistributorFolder + "\\" + lFilename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
DbProviderFactory lFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
int lSequence = 0;
using (DbConnection lConnection = lFactory.CreateConnection())
{
    lConnection.ConnectionString = lConnectionString;
    lConnection.Open();

    foreach (DataRowView rowView in dv)
    {
        DataRow row = rowView.Row;

        lSequence++;

        using (DbCommand lCommand = lConnection.CreateCommand())
        {

            lCommand.CommandText = "INSERT INTO [Sheet1$]";
            lCommand.CommandText += "([First Name],[Last Name],[Title],[Company],[Address],[Address 2],[City],[State],[Zip],[Country],[Work phone],[Email],[Website],[Stamp Time],[Campaign],[Source],[Business Unit],[Market Segment],[Notes],[Other Source Detail],[Description],[Sales Employee firstname],[Sales Employee last name],[Reason],[Status],[Category],[Priority]) ";
            lCommand.CommandText += "VALUES(";
            lCommand.CommandText += "\"" + row["name"].ToString().Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["lastname"].ToString().Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["title"].ToString().Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["company"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["address"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["address2"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["city"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["state"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["zip"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["country"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["workphone"].ToString() + "\",";
            lCommand.CommandText += "\"" + row["email"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["website"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["stamptime"].ToString() + "\",";
            lCommand.CommandText += "\"" + row["campaign"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["source"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + string.Empty + "\",";
            lCommand.CommandText += "\"" + row["market"].ToString() + "\",";
            lCommand.CommandText += "\"" + row["qc"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
            lCommand.CommandText += "\"" + row["othersourcedetail"].ToString() + "\",";
            lCommand.CommandText += "\"" + string.Empty + "\",";
            lCommand.CommandText += "\"" + string.Empty + "\",";
            lCommand.CommandText += "\"" + string.Empty + "\",";
            lCommand.CommandText += "\"" + "Lead" + "\",";
            lCommand.CommandText += "\"" + "Open" + "\",";
            lCommand.CommandText += "\"" + "Lead" + "\",";
            lCommand.CommandText += "\"" + "High" + "\"";
            lCommand.CommandText += ")";
            lCommand.ExecuteNonQuery();
        }
    }

    lConnection.Close();
}

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

String.Substring (0, 255). Сделайте петлю и положение. разделить предложение. сохраните его в массив и продолжайте цикл каждые 255 символов, пока позиция строки не достигнет конца строки.

Loop. разделить каждые 255. запомнить положение в строке.

0 голосов
/ 09 февраля 2012

Этот linq не такой красивый, но он мне все еще нравится ...

int len = 255;
for (int i = 0; i < big.Length; i += len )
{
    string clip = new string(big.Skip(i).Take(len).ToArray());
}
0 голосов
/ 09 февраля 2012

Этот LINQ не очень красивый, но он разбивает любую строку, str, которую вы указали, на несколько частей, каждая из которых имеет длину len (и, в случае последней части, меньше).

int len = 4;
string str = "abcdefghijklmnopqrstuvwxyz";

string[] parts =
    str.Select((chr, index) => new { chr, index })
       .GroupBy(entry => entry.index / len)
       .Select(group => new string(group.Select(entry => entry.chr).ToArray()))
       .ToArray();

Это может быть немного более разборчиво:

string[] parts =
    Enumerable.Range(0, (str.Length - 1) / len + 1)
              .Select(i => str.Substring(i * len, Math.Min(len, str.Length - i * len)))
              .ToArray();
...