みんなおはよう。
私は現在、十分に単純であると確信している何かを理解しようとしていますが、実際にうまくいくには半分の作業であることが証明されています.
さまざまなファイルを別の場所に移動することで、ドライブの使用を最小限に抑えるように設計されたプロジェクトに取り組んでいます。int64
移動する可能性のあるファイルのファイル サイズを含む値の配列 (0..12) を取得しました。配列は、予測される最大のファイル サイズから予測される最小のファイル サイズまでの順序で並べられます。また、これらのファイルの名前を別の配列 ( としてWoWData
も知られる 、[0..12]
) に保存しました。次に、「インストール サイズ」と「目的のサイズ」を取得しました。
私の仕事は、ファイルサイズの配列を調べて、<=希望のサイズ。
これは、私が使用しようとしてきたサンプル コード (Delphi/Firemonkey) です。このような作業を行う方法を理解しようとすると混乱するので、多くの問題が発生することは間違いありません。
Global Vars;
_WoWDataFileSize : Array [0..12] of Int64;
// "TBWoWDir" is a TTrackBar (Firemonkey)
var
TotalSize, ReqSize, DiffSize, CurDiff : Int64;
i : Integer;
begin
// Set up initial values to work with
ReqSize := Round(TBWoWDir.Value); // Requested Size
TotalSize := Round(TBWoWDir.Max); // Actual installation size
CurDiff := 0; // Assume as "Current Difference in size"
// Calculate difference between install and requested size
DiffSize := TotalSize - ReqSize; // This calculates correctly
// The below is what i'm struggling with
repeat
for i := Low(_WoWDataFileSize) to High(_WoWDataFileSize) do
begin
CurDiff := ReqSize - _WoWDataFileSize[i];
end;
until CurDiff <= ReqSize;
end;
repeat .. until
ループなしでループだけを使用してみましたfor
が、もう一度、それを理解しようとしているときに混乱しすぎています。
例を挙げましょう。_WoWDataFileSize[0]
それが 200 で、_WoWDataFileSize[1]
~まで_WoWDataFileSize[12]
が配列インデックスと同じ値であると仮定しましょう(例: _WoWDataFileSize[6]
= 6、_WoWDataFileSize[8]
= 8 など)。
150 の値 (200 - 12 - 11 - 10 - 9 - 8
またはArray[0] - Array[12] - Array[11] - Array[10] - Array[9] - Array[8]
配列による) を計算し、この要件を満たすために移動する必要があるファイルのリストを配列から取得しWoWData
たい場合、どのようにルーチンを記述しますか?
で指定された動的なユーザー要求サイズに向けて作業しているため、150 は任意の数値に置き換えることができますTBWoWDir.Value
。
While
ループを実行してセットアップを使用する必要があるかもしれないと考えていi := i+1
ます。現実的には、一度に配列内の値を 1 つ取り出して、その都度、必要な値以下かどうかを確認するようにハードコーディングすることができます。項目ごとに 2 ~ 3 行になります (したがって、合計 24 ~ 36 行) ですが、これは維持するのが面倒であり、最適ではありません。ループでそれがどのように行われるかを見ることに興味があります。通常、ループに問題はありませんが、これは私にとって標準的なものではありません。