-4

Visual Fox Pro コードを C# に移行しています。ネット

Visual Fox Pro の特徴: テキスト文字列 (テキスト ボックスにキャプチャされた) に基づいて 5 桁の文字列 ("48963") を生成します。 C#の私のコード。NET は同じ文字列を生成する必要があります。

次のコードを移行したい (Visual Fox Pro 6 から C#)

gnLower = 1000
gnUpper = 100000
vcad = 1
For y=gnLower to gnUpper step 52
    genClave = **Rand(vcad)** * y
    vRound = allt(str(int(genclave)))
    IF Len(vRound) = 3
            vDec = Right(allt(str(genClave,10,2)), 2)
            finClave = vRound+vDec
            Thisform.txtPass.value = Rand(971);
    Exit
    Endif
Next y

出力:

vcad = 1 return: 99905 vcad = 2 return: 10077 vcad = thanks return: 17200

ありがとう!

4

4 に答える 4

1

他の質問http://foxcentral.net/microsoft/vfptoolkitnet.htmに投稿したように、.net 用の VFP ツールキットには同じランド ジェネレーター関数がある可能性があります。

于 2012-06-05T22:24:31.633 に答える
0

VFP RAND 呼び出しを COM dll にカプセル化し、説明とまったく同じ動作を得る必要がある場合は、.net から呼び出します

奇妙なデザインに思えますが、それはレガシー システムだと思います。

于 2012-06-06T01:41:48.193 に答える
0

に相当する

Rand(vcad)

(new Random(vcad)).Next();

に相当する

x = Rand(seedValue)
y = Rand()

Random r = new Random(seedValue);
x = r.Next();
y = r.Next();

ただし、これらの同等のステートメントが実際に VFP で c#.Net と同じ結果を生成する場合は、非常に幸運であると考える必要があります。基盤となる実装は同じでなければなりませんが、これには非常に驚かされます。それらが同じ結果を生成せず、それが必要な場合は、FoxPro の Rand 関数の内部実装が何であるかを調べ、それを c# コードで複製するタスクが残されています。

vcad の値の範囲が特定の範囲内に制限されている場合、最も簡単な解決策は、VFP を使用してルックアップ値のテーブルを生成し、それを C# 変換で使用することです。

于 2012-06-05T21:57:12.370 に答える
0

あなたのソリューションは、C# .net 4.0 の 2 つの既存のメソッドと同じくらい簡単です。

public int MyRandomFunction(string seedString)
{
    int hashCode = seedString.GetHashCode(); // Always returns the same integer based on a string
    Random myGenerator = new Random(hasCode);
    return myGenerator.Next(10000, 99999); // Returns a number between 10000 and 99999, ie 5 digits
}

常に同じシードから開始するため、常に同じ初期値が得られます。

于 2012-06-05T21:58:59.530 に答える