2014-11-12 2 views
0

현재 반복적 인 수작업이 많은 게임 서버에 새로운 playermodels을 추가하는 데 필요한 특정 변환 프로세스를 자동화하는 프로그램을 만들려고합니다.VB에서 선택적으로 문자열을 조작합니다.

그러나이 겉으로보기에는 단순한 비트를 극복하기 위해 고심하고 있습니다! 사용자는 다음과 같은 디렉토리 문자열을 던지는 파일 대화 상자를 사용하여 프로세스 시작시 파일을 선택합니다.

"M : \ User \ Documents \ Playermodel 프로그램 \ Raw Addon \ Stalker Playermodel \ models \ player \ zelpa \ model.mdl "

내가 아래로이 문자열을 단축 할 :

"\ zelpa \ model.mdl "

문제되는 모델 \ 플레이어, 아무것도가 변경 될 수 있습니다 전에있다. 그래서 파일 이름과 실제 모델이있는 'models'과 폴더 사이의 모든 디렉토리를 볼 수 있습니다! 그래서가는 유일한 확실한 비트는 항상/models /입니다.

내가하고 싶은 것은 문자열을 가져 와서 "\ models \"과 같은 문자열 부분까지 모두 지우고 모든 항목을 지우고 첫 번째 "\"를 삭제하는 것입니다. 누군가는 "던지기"라는 폴더를 가지고있을 수 있기 때문에 "모델 \"이 아니라 "모델 \"을 검색해야합니다!

어떻게하면됩니까? 겉보기에 간단한 문제로, 나는 그것이 매우 복잡한 해결책을 가지고 있을지 모른다는 두려움을 가지고 있습니다! 내가 제대로 따라 다음입니다 경우

+0

표시 할 디렉토리의 문자열은 예외입니까? 결과입니까? 또한 정규식을 들여다 보았습니까? – Ckrempp

+0

첫 번째 문자열은에서와 같이 일반적인 입력의 예입니다. 두 번째 문자열 (내가 단축하고자하는 것)은 프로그램 자체에서 사용해야하는 문자열입니다. 오해가 아닌 한, 정규 표현식이 항상 일치하는 '앵커'포인트 만 가지고 있다고 가정 할 때 정규 표현식이 여기에 적용되는 방법을 잘 모르겠습니다. – gundog48

+0

죄송합니다. 저는 다른 문제를 생각했습니다. 'myFilePath.Split ('\')'를 실행하여 원하는 파일 경로의 세그먼트를 추출 할 수있는 문자열 []을 만들 수 있습니다. – Ckrempp

답변

1

, 당신은 단지 \models\ 부분을 찾기 위해 String.IndexOf을 사용할 수 있으며, String.Substring 당신이 관심있는 경로의 일부를 추출 :

Dim fileName = "M:\User\Documents\Playermodel Program\Raw Addon\Stalker Playermodel\models\player\zelpa\model.mdl" 
Dim partPath = fileName.Substring(fileName.IndexOf("\models\") + 1) 
0

을 LINQ가 너무 재미 때문입니다. ..

Dim s As String = "M:\User\Documents\Playermodel Program\Raw Addon\Stalker Playermodel\models\player\zelpa\model.mdl" 
Dim returnValue As String = String.Join("\", s.Split("\".ToCharArray()).Reverse().Take(4).Reverse()) 

이것은 "\"로 나뉘며 마지막 네 부분을 차지합니다. 이것은 목록을 뒤집어서 첫 번째 네 부분을 취한 다음 다시 뒤집어서 수행합니다. 그런 다음 "\"를 사용하여 다시 결합합니다.

+0

LINQ도 좋아하지만 "처음 네 부분"은 고정되어 있다고 생각하지 않습니다. "모델"다음에 경로에 디렉토리가 더있을 수 있습니다. 그래서, 아마도 다음과 같은 것입니다.'String.Join ("\", fileName.Split ({ "\"c}). SkipWhile (Function (x) x.ToLower() <> "models"))'. – Mark

+0

당신이 맞습니다! :) 내 부분에 대한 요구 사항을 잘못 읽었지 만 솔루션을 멋지게 보이므로 맡길 것입니다! – Derek

관련 문제