2016-07-31 5 views
1

Я пытаюсь преобразовать следующую строку james-and-the-giant-peach в следующее: James and the Giant Peach, поэтому в основном свопинг - для пробела и заглавные буквы первой буквы каждого слова, кроме слов типа и, или, или и т. Д. .VBScript - Заглавная буква первого слова каждого слова

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

Вот код, используемый до этого, и код для вызова самой функции: strModpack = Replace(Modpack,"-"," ") strModpack = MakeUpperCase (strModpack)

Вот код, который я пытался начать с:

Function MakeUpperCase (inputText) 
    Dim arrWords, x, curWord 
    Dim leftPart, rightPart 
    arrWords = Split(inputText, " ") 
    For x=0 To UBound(arrWords) 
     curWord = arrWords(x) 
    If Len(curWord)>0 Then 
     leftPart = UCase(Left(curWord, 1)) 
     If Len(curWord)>1 Then 
      rightPart = LCase(Right(curWord, Len(curWord) - 1)) 
     Else 
      rightPart = "" 
     End If 
     curWord = leftPart & rightPart 

    End If 
    arrWords(x) = curWord 
    Next 
     MakeUpperCase = Join(arrWords, " ") 
    Erase arrWords 
End Function 

Мой выход в данный момент: James and the giant peach

РЕДАКТИРОВАТЬ: Код ниже, казалось, был настолько близок, но только одно из слов, которое ему нужно для строчной буквы.

Function MakeUpperCase(inputText) 

Dim arrWords, x, curWord 
Dim leftPart, rightPart 

Exclude = "and,the" 
arrExclude = Split (Exclude, ",") 
arrWords = Split (inputText, " ") 

For x=0 To UBound(arrWords) 
    curWord = arrWords(x) 
    If Len(curWord)>0 Then 
     leftPart = UCase(Left(curWord, 1)) 
    If Len(curWord)>1 Then 
     rightPart = LCase(Right(curWord, Len(curWord) - 1)) 
    If curWord = arrExclude(intWord) Then   
     leftPart = LCase(leftPart) 
    End if 
    Else 
     rightPart = "" 
    End If 
curWord = leftPart & rightPart 

End If 
arrWords(x) = curWord 
Next 
    MakeUpperCase = Join(arrWords, " ") 
Erase arrWords 

End Function 

В настоящий момент на продажу представлены: Джеймс и гигантский персик (например).

ответ

1

Ваш текущий результат не является «Джеймсом и гигантским персиком», если вы действительно используете arrWords = Split(inputText, " ") - это должно быть изменено на разделитель «-» - для вашего ввода в любом случае.

Затем он возвращается к James And The Giant Peach

В любом случае - я думаю, что это небольшое изменение должно работать для вас.

FINAL VERSION

' CONVERT TO UPPERCASE FUNCTION ------------------------ ' 
Function MakeUpperCase(inputText) 

    Dim arrWords, x, curWord 
    Dim leftPart, rightPart 

Exclude = "of,the" 
arrExclude = Split (Exclude, ",") 
arrWords = Split (inputText, " ") 

For x=0 To UBound(arrWords) 
curWord = arrWords(x) 
If Len(curWord)>0 Then 
    leftPart = UCase(Left(curWord, 1)) 

     If Len(curWord)>1 Then 
      rightPart = LCase(Right(curWord, Len(curWord) - 1)) 

      For intWord = 0 to UBound(arrExclude) 
       If curWord = arrExclude(intWord) Then   
        leftPart = LCase(leftPart) 
       end if 
      Next 
     Else 
      rightPart = "" 
     End If 

     curWord = leftPart & rightPart 

    End If 
    arrWords(x) = curWord 
Next 

MakeUpperCase = Join(arrWords, " ") 
Erase arrWords 

End Function 
+0

Я использовал 'strModpack = Replace (Modpack," - "," ")' в другом месте кода, но затем понял, что 'strModpack = MakeUpperCase (Modpack)' был неправильным, он должен был быть 'strModpack = MakeUpperCase (strModpack) 'Теперь я исправил это и у вас есть правильный случай, теперь просто включите код, чтобы проверить слова NOT для использования. – Bolte

+0

Если код в вашем вопросе не является тем, что вы используете, вы должны его отредактировать и занести в его примечание - попробовали ли вы код выше? – dbmitch

+0

Использование приведенного выше кода дает мне ошибку для ожидаемого = в строке для 'Const EXCLUDE_WORDS As String =" the, a, and, or, was, is "' – Bolte

0

Используя правильные инструменты

  1. строка замены для "-" => ""
  2. RegExp с замещать функцию Caps
  3. словарь для исключений

вы получите:

Option Explicit 

' replace function for 'words', heads, and tails 
Function rf(sm, g1, g2, g3, np, ss) 
    If Not gdLowers.Exists(g1) Then g1 = UCase(g2) & g3 
    rf = g1 
End Function 

Dim s 
' dictionary to hold words that stay lower case 
Dim gdLowers : Set gdLowers = CreateObject("Scripting.Dictionary") 
For Each s In Split("a the and") 
    gdLowers(s) = Empty 
Next 

Dim f : Set f = GetRef("rf") 
Dim r : Set r = New RegExp 
r.Global = True 
r.Pattern = "\b((.)(.*?))\b" 
Dim aTests : aTests = Array(_ 
    "james-and-the-giant-peach" _ 
    , "add-some-of-your-own" _ 
) 

For Each s In aTests 
    WScript.Echo s 
    WScript.Echo r.Replace(Replace(s, "-", " "), f) 
    WScript.Echo 
Next 

выхода:

cscript 38686250.vbs 
james-and-the-giant-peach 
James and the Giant Peach 

add-some-of-your-own 
Add Some Of Your Own 

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

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