2

おはようございます!

おそらく簡単な質問ですが、思い通りに物事を進めることができません。現在、「キャッチオール」テキスト フィールドを含むレポートを使用しています。このフィールドでは、ユーザーは必要なものを何でも入力できます。場合によっては、列形式 (例: 1.1) で情報を入力します。このフィールドでは、このフィールドに「行」を作成するために使用されるキャリッジ リターンを使用できます。問題は、ユーザーが、情報を入力するときに列間のスペースを数えなくても、このフィールドの「列」をレポートに並べたいということです (例: 1.2)。問題は、この種の情報が入力された場合でも、プロトコルやフォーマットのガイドラインが設定されていないことです。複数の「字幕」、行、字幕で区切られた行などがある場合があります。

私は現在、個々の行を分離し、それぞれを必要に応じてフォーマットし、次のように元に戻そうとしています:

    Dim output As String
    Dim sections as String
    Dim returnCount as Int 
    Dim leftText as String
    Dim rightText as String
    Dim sectionTogether as String
    Dim totalText as String
    Dim textLength as Int

    output = {table.textfield}

    sections = ExtractString(output, Chr(10), Chr(10))

    If Instr(sections,"  ") > 0 Then
      leftText = Left(sections, Instr(sections, "  "))
      textLength = Length(Left(sections, Instr(sections, "  "))
      rightText = Right(sections, Instr(sections, "  "))
      Replace(sections,"  "," ")
      sectionTogether = rightText + (Space(20) - (textLength - 3)) + leftText
      totalText = totalText + sectionTogether
      formula = totalText
    else
      formula = output

これが私がやろうとしていることの要点です。いくつかの注意事項: 1) すべてのセクションをフォーマットするための何らかのループが欠けていることは知っていますが、それを Crystal で設定する方法がわかりません 2) VB プログラミングの経験はありますが、Crystal とその限られたツールに慣れていません。 Visual Studio で使用するメソッドとツールを見つけるのに苦労しています 3) 構文がいくつかの場所でオフになっている可能性があります。これは、まだセットアップ方法を学習中であり、デバッガーが本当に恋しいからです。

誰かが私を助けてくれることを願っています.1週間以上研究してきましたが、頭を壁にぶつけているように感じます.

前もって感謝します。

The output examples
ex. 1.1
"Your current charges are:
Jan          12.89
Feb         117.44
Mar          15.02
Apr        4.17"

ex. 1.2
"Your current charges are:
Jan                       12.89
Feb                      117.44
Mar                       15.02
Apr                        4.17"
4

1 に答える 1

3

最初に行うことは、次のように、split() を介して行を分割することです。

local stringvar array wallOText := split({table.textfield},chr(10));

これにより、各配列エントリが「行」である文字列の配列が得られます。これで、次のように行をループできます。

for i := 1 to ubound(wallOText) step 1 do <some stuff to wallOText[i]>

ここで、列を右揃えにするのは少し面倒ですが、開始するためのコードを次に示します。必要に応じて列幅を調整できます (この場合は 20 スペース)。また、固定幅フォントを使用する必要があることに注意してください。

local stringvar output;
local stringvar array row;
local numbervar i;
local numbervar j;
local stringvar array wallOText := split({@some text},chr(10));
local stringvar elem;

for i := 1 to ubound(wallOText) do  //loop over lines
    (row := split(wallOText[i]," ");
     for j := 1 to ubound(row) do //loop over words
        (elem := trim(row[j]); //get current element and cut white space
         if not(elem="") then 
         output := output + space(20-len(elem)) + elem); //build output string
     output := output + chr(10));

output
于 2012-04-11T18:26:35.703 に答える