2013-02-13 3 views
2

Это мой худший сценарий для моей работы. Я должен автоматически отделить этот набор строк, но просто не знаю, какую функцию я должен использовать. Это совершенно сложно! Мне нужно отделить строки для следующего шага работы моей базы данных в Excel.Формула для разделения строк с конкретным шаблоном

Ниже приведены примеры данных:

Строки должны быть разделены в колонке А -

java-1.6.0-openjdk-1.6.0.0-1.21.b17.el6.x86_64 
java-utils-1.6.0.0-1.el6.x386 
Java-1.7.0-openjdk-1.7.1-3.1.5 
gdb-1.6-5.2.7.el6 

Части струн после отделения успешно, в колонках BCDEFGHI -

#   name  #   Version # OSLv # Architecture # 
java # 1.6.0 #openjdk # 1.6.0.0 # 1.21.b17 # el6 # x86_64 # 
java# utils#   # 1.6.0.0 # 1   #el6_3 #x386 # 
Java#  #   # 1.7.1 # 3.1.5 #  #  # 
gdb #  #   # 1.6  #5.2.7  #el6 #  # 

(На мой взгляд, если мы сначала разделим струны на две части, например

java-1.6.0-openjdk-1.6.0.0-1.21.b17  #####  .el6.x86_64 

затем расщепляются на определенные части позже будет легче ... может быть!?)

Спасибо большое за каждый бит помощи.

Я принимаю любые решения, которые вы можете предоставить мне для дальнейшего изучения: D

«#» отмечает показать разделение частей строк в разные клетки.

+0

My upvote для нетривиального расщепления! – Ksenia

+1

JQuery сделал бы это! ;-) –

+0

нулевые знания о JQuery, но спасибо, я изучу об этом после этого – eathapeking

ответ

2

следующие формулы не полное решение, но должно обеспечить стартовое место для вас, чтобы понять вид строковых манипуляций, которые вам нужно будет сделать:

Из головы строки, которая будет анализироваться:

=LEFT(A1,SEARCH("-",A1)-1) 

    =IFERROR(MID(A1,LEN(A6)+2,SEARCH("-",A1,LEN(A6)+2)-LEN(A6)-2),"-") 

    =IFERROR(MID(A1,LEN(A6&B6)+3,SEARCH("-",A1,LEN(A6&B6)+3)-LEN(A6&B6)-3),"-") 

    =IFERROR(MID(A1,LEN(A6&B6&C6)+4,SEARCH("-",A1,LEN(A6&B6&C6)+5)-LEN(A6&B6&C6)-4),"-") 

(я оставил несколько в середине строки для вас сделать.)

из хвоста строки, которая будет анализироваться:

=IFERROR(MID(A1,SEARCH("el",$A1),SEARCH("x",A1)-(SEARCH("el",A1)+1)),"-") 

    =IFERROR(RIGHT(A1,LEN(A1)-SEARCH("x",A1)+1),"-") 

Тот факт, что струны не имеют одинаковое число элементов, и что не все элементы разделяются тире («-») делает это более сложным, чем обычные строки разбора задачи. Когда вы застряли, вы должны вернуться с более конкретным вопросом.

+0

да проблема в том, что все элементы отдельно by-dash намного проще .. большое спасибо :) – eathapeking

+2

Посмотрите эту тему как хорошо: http://stackoverflow.com/a/14453972/1953175 - почти такая же проблема была решена –

+0

...................... – eathapeking

2

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

См. http://excelicious.wordpress.com/code-samples/vba/regex-functions/ для библиотеки, которую вы можете построить с помощью/on.

+1

+1 для указания большого ресурса! – chuff

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