2013-08-13 2 views
1

Я использую asp.net. Я пытаюсь разделить данные, которые находятся в datatable. У меня есть пример кода, как это:разделил строку строки datatable в asp.net

{  dt=objErrorLoggingDataAccess.GetErrorDetails(errorID); 

     string[] stringSeparators = new string[] { "Message" }; 
     string error = dt.Rows[0]["Message"].ToString(); 
     string[] test = error.Split(stringSeparators, StringSplitOptions.None); 
     string PageName = test[0].ToString(); 
     PageNameLabel.Text = PageName; 

     stringSeparators=new string[] {HttpContext.Current.Request.Url.ToString()}; 
     error = dt.Rows[0]["Message"].ToString(); 
     test = error.Split(stringSeparators, StringSplitOptions.None); 
     string Message = test[0].ToString(); 
     MessageLabel.Text = Message;} 

в DataTable следующие данные есть:

{....ID.......Message....................................................................................................................... 
....1........http://localhost:10489/images/CategoryIcon/images Message : File does not exist. UserName: [email protected] 
....2........http://localhost:10489/images/CategoryIcon/images Message : File does not exist. UserName: [email protected]} 

теперь моя проблема заключается в том, как я могу разделить сообщение и хранить в этикетке. Я хочу

{http://localhost:10489/images/CategoryIcon/images} 

отдельно и UserName отдельно и сообщение отдельно. Как я могу сделать? Выполняя вышеуказанный код, я могу разделить

{ http://localhost:10489/images/CategoryIcon/images 
    } 

только. Как я могу разделить столбец Message и сохранить в pageLabel, MessageLabel, UserNamelabel.

Спасибо

с Regard

Iswar

+0

ЕСЛИ это возможно, измените структуру вашего datatable (и базы данных), чтобы нормализовать ваши результаты. Не храните несколько значений в одном столбце. – Mr47

+0

сэр. Я нормализую данные раньше, но это так. –

ответ

1

Я хотел бы использовать регулярное выражение в данном случае. Потому что только разделение этой строки выглядит немного негибким для меня.

Я проверил ваш пример данных против этого быстрого и грязного RegEx:

(?<id>\d+)\.*(?<url>\w+:\/\/[\[email protected]][\w.:@]+\/?[\w\.?=%&=\[email protected]/$,]*)\s*Message\s*:\s*(?<message>.*)UserName:\s*(?<username>([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})) 

Он поддерживает действительный URL-адрес и шаблоны электронной почты.

Regex regex = new Regex(
     "(?<id>\\d+)\\.*(?<url>\\w+:\\/\\/[\\[email protected]][\\w.:@]+\\/?[\\w\\.?"+ 
     "=%&=\\[email protected]/$,]*)\\s*Message\\s*:\\s*(?<message>.*)UserName:\\s"+ 
     "*(?<username>([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1"+ 
     ",3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|"+ 
     "[0-9]{1,3}))", 
    RegexOptions.IgnoreCase 
    | RegexOptions.CultureInvariant 
    | RegexOptions.IgnorePatternWhitespace 
    | RegexOptions.Compiled 
    ); 


// Capture the first Match, if any, in the InputText 
Match m = regex.Match(InputText); 

// Capture all Matches in the InputText 
MatchCollection ms = regex.Matches(InputText); 

// Test to see if there is a match in the InputText 
bool IsMatch = regex.IsMatch(InputText); 

// Get the names of all the named capture groups 
// I included your fields as groups: id, url, message and username 
string[] GroupNames = regex.GetGroupNames(); 

Я не знаю, как часто вам нужно звонить по этому коду. Возможно, вы столкнулись с проблемами производительности, если у вас слишком много данных. Это регулярное выражение q & d - пожалуйста, отрегулируйте его в соответствии с вашими потребностями.

Смежные вопросы