我正在使用delphi打印標籤。我將值存儲在數組中並打印相同。我想知道,當我對標籤沒有價值並使下一個標籤利用爲空值或空值提供的空間時,我們如何刪除空間。如何搜索數組中的空值/空值,然後使用其他值擦除和更新字段
回答
所以,如果我理解你的權利,你有一個Array
與字符串值這樣['Item1', 'Item2', '', 'Item4']
,你想使它成爲['Item1', 'Item2', 'Item4']
刪除空項目?
正如評論所述,這可以用一個好的舊如果聲明,但我寧願給你一個通用的解決方案。
首先要創建一個帶有助手的新單元,該助手可以從陣列中刪除任何給定的值。
unit ArrayHelperU;
interface
type
ArrayHelper = record
class procedure RemoveAll<T>(var Values: TArray<T>; const Value: T); static;
end;
implementation
uses
Generics.Defaults;
{ TArrayHelper }
class procedure ArrayHelper.RemoveAll<T>(var Values: TArray<T>; const Value: T);
var
I, Count: Integer;
EqualityComparer: IEqualityComparer<T>;
begin
EqualityComparer := TEqualityComparer<T>.Default;
Count := 0;
for I := low(Values) to high(Values) do
if not EqualityComparer.Equals(Values[I], Value) then
begin
Values[Count] := Values[I];
inc(Count);
end;
SetLength(Values, Count);
end;
end.
下一步是調用它。在我小的演示項目我已經把TMemo
空白表單,然後我從FormCreate
uses
ArrayHelperU;
procedure TForm36.FormCreate(Sender: TObject);
var
Values: TArray<string>;
Buffer, Element: String;
i: Integer;
begin
//Make room for 10 elements
Setlength(Values, 10);
//Initialize the aray with some dummy values
//Some of them are blanks
for i := Low(Values) to High(Values) do
if i mod 2 = 0 then
Values[i] := 'Item' + IntToStr(i);
//Print the array to the screen
Memo1.Lines.Text := 'BEFORE: ';
Buffer := '[';
for Element in Values do
Buffer := Buffer + #39 + Element + #39 + ' ,';
Buffer[Length(Buffer)] := ']';
Memo1.Lines.Add(Buffer);
//Call our ArrayHelper from befor
ArrayHelper.RemoveAll<string>(Values, '');
//Print the array to the screen
Buffer := '[';
for Element in Values do
Buffer := Buffer + #39 + Element + #39 + ' ,';
Memo1.Lines.Add('');
Memo1.Lines.Add('AFTER:');
Buffer[Length(Buffer)] := ']';
Memo1.Lines.Add(Buffer);
end;
叫幫手,我放在評論中的代碼,所以你可以看到它是如何工作的。
剩下的只是顯示結果。
在Delphi 7使用舊的好的動態數組。
使用字符串的值類型,就可以解決這個問題如下:
創建一個新的VCL應用程序,放置一個備忘錄,然後:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure DynamicStringArrayWay;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DynamicStringArrayWay;
var
ValueArray : array of string;
n : Integer;
n2 : Integer;
begin
SetLength(ValueArray, 6);
// fill array:
ValueArray[0] := 'LabelA';
ValueArray[1] := '';
ValueArray[2] := 'LabelB';
ValueArray[3] := '';
ValueArray[4] := 'LabelC';
ValueArray[5] := 'LabelD';
// reduce:
for n := Length(ValueArray)-1 downto 0 do
begin
if (ValueArray[n]='') then
begin
// delete element n:
for n2 := n to Length(ValueArray)-2 do
ValueArray[n2] := ValueArray[n2+1];
SetLength(ValueArray, Length(ValueArray)-1);
end;
end;
// print:
for n := 0 to Length(ValueArray)-1 do
Memo1.Lines.Add(ValueArray[n]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DynamicStringArrayWay;
end;
end.
TValue可能是一個「壞」的名字,因爲已經有了一個數據類型Delphi稱爲TValue。你應該考慮更通用,因爲你將它硬編碼爲字符串數組。 –
@JensBorrisholt:TValue是爲了舉例。由於對所需項目類型的瞭解有限,因此我可以選擇使這部分易於修改。在這個例子中,我使用了字符串類型以便於說明。 –
我正在使用delphi 7,並且使用字符串數組來存儲值 – delsql
- 1. 搜索多維數組的值,然後在數組中輸出其他值
- 2. 如何將字段更新爲空值?
- 3. 更新其他字段的值更改一個字段的值
- 4. 如何根據其他字段值爲空值
- 5. 將空/空字段轉換爲其他字段的值
- 6. 使用PHP變量來搜索數組中的值,然後將其刪除
- 7. 列空或空然後從其他表中提取值
- 8. 使用其他列中的非空值填充空值
- 9. 如何檢查fql中的空值或空值(快速搜索)?
- 10. 如果其他值爲表格字段空白值
- 11. JSON中的空字段:空引號,空值或刪除字段?
- 12. 搜索數組?然後獲取子值?
- 13. 使用空值/無值更新INT/DECIMAL字段
- 14. PHP:從數組中刪除空值,然後將其轉換爲字符串
- 15. 更新空值的varchar字段
- 16. JS如果/然後刪除空值
- 17. 使用數據框中其他列的值替換空值
- 18. 如何從數組中刪除空值?
- 19. 如何從數組中刪除空值?
- 20. 如何使用來自其他表的數據同時更新空值的表?
- 21. 如果其他字段爲空,則將字段更新爲空或刪除行
- 22. 在drupal-6中搜索其中一個字段值的數組數值
- 23. PHP - 從數組中刪除重複,然後取出空值,然後重組
- 24. 在Discover中搜索空值
- 25. 刪除(使空)重複的字段值
- 26. 如何在javascript中搜索空值
- 27. 更新空值
- 28. 如何刪除數組的空值
- 29. 如何刪除數組值的空間?
- 30. 如何根據mySql中的其他表更新字段值?
這聽起來像良好的OLE」工作'if'聲明,但請張貼一些代碼,以便我們提供更可靠的建議。 – GolezTrol
使用'TArray.Where'from https://github.com/SirRufo/stateless/blob/master/Stateless/Stateless.Utils.pas#L379 –