2

私は VBScript コーディングの C の学生で、少し助けが必要です。

私のコードは、次のように分割コマンドを実行します。

outputArray = split(説明," ")

Description の個々の単語が配列になったので、各単語の文字列の長さに基づいて配列を並べ替えたいと思います。

たとえば、Description が "this is an example of a description" と等しい場合、配列の値は [this, is, an, example, of, a, description] ですよね?

しかし、配列を並べ替えて、最も長い単語が最初になるようにします。つまり、配列の項目は文字列の長さで並べ替えます。したがって、理解できないいくつかの VBScript コードの後、配列は次のようになります。

文字列の長さが同数の場合、2 番目の並べ替えはアルファベット順になります。

私はそこにいるAの学生からこれについて助けていただければ幸いです. ありがとう。

4

2 に答える 2

4

VBScript にはネイティブの並べ替えがないため、友人の助けが必要です。あなたの場合、より複雑な並べ替え基準のために、友人は.NetのArrayList、JScriptの並べ替え、またはsort.exe(ここで紹介)ではなく、切断されたADOレコードセットである必要があります。

  Const adInteger          =          3 ' 00000003
  Const adVarChar          =        200 ' 000000C8

  Dim sInp : sInp = "this is an example of a description"
  Dim aInp : aInp = Split(sInp)
  WScript.Echo "A:", Join(aInp)

  Dim oRS : Set oRS = CreateObject("ADODB.Recordset")
  oRS.Fields.Append "Word", adVarChar, 50
  oRS.Fields.Append "Length", adInteger
  oRS.Open
  Dim sWord
  For Each sWord In aInp
      oRS.AddNew
      oRS.Fields("Word").value = sWord
      oRS.Fields("Length").value = Len(sWord)
      oRS.UpDate
  Next
  oRS.Sort = "Length DESC, Word"

  Dim aTable : aTable = oRS.GetRows()
  ReDim aOut(UBound(aTable, 2))
  Dim i
  For i = 0 To UBound(aOut)
      aOut(i) = aTable(0, i)
  Next
  WScript.Echo "B:", Join(aOut)

出力:

A: this is an example of a description
B: description example this an is of a

バックグラウンドについては、ここから開始してください。

追加 - ArrayList 愛好家向け:

データが本質的に表形式である場合 (並べ替え条件に要素の複数の側面/プロパティが含まれる場合)、Disconnected Recordset を最初に選択する必要があります。

VBScript での ArrayList の並べ替えは、単純なケースにのみ適しています。これは、AFAIK で比較関数を並べ替えメソッドに渡すことができないためです。私が間違っていることを証明してください!

より複雑な並べ替えに ArrayList を使用する必要がある場合は、 シュワルツ変換を検討してください。

  1. 比較を容易にするためにカスタマイズされた一時データを準備する
  2. 選別
  3. 元のデータを回復する

コード内:

  Const csSep = "|"
  Const cnMax = 100

  Dim sInp : sInp = "this is an example of a description"
  Dim aInp : aInp = Split(sInp)
  WScript.Echo "A:", Join(aInp)

  Dim oNAL : Set oNAL = CreateObject( "System.Collections.ArrayList" )
  Dim oSB  : Set oSB  = CreateObject( "System.Text.StringBuilder" )
  Dim sWord
  For Each sWord In aInp
      oSB.AppendFormat_3 "{0,4}{1}{2}", 100 - Len(sWord), csSep, sWord
      sWord = oSB.ToString()
      oSB.Length = 0
      oNAL.Add sWord
  Next
  oNAL.Sort

  ReDim aOut(oNAL.Count - 1)
  Dim i
  For i = 0 To UBound(aOut)
      aOut(i) = Split(oNAL(i), csSep)(1)
  Next
  WScript.Echo "B:", Join(aOut)

出力:

A: this is an example of a description
B: description example this an is of a
于 2012-12-07T06:25:57.683 に答える
0

これは、長さおよびアルファベット順にソートする方法に関する役立つリンクです

http://www.webknowhow.net/dir/ASP/FAQ/array_faq.html

于 2012-12-06T21:47:01.563 に答える