我有一个EXCEL工作表。它有各种形式的字段,命名为
鈥渟mrBgm133GallonsGross/ smrBgm167GallonsGross 鈥�
和
鈥渟mrEgm133GallonsGross/ smrEgm167GallonsGross 鈥�
我在XCEL工作表中添加了2个名为 smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA
smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA
我在EXCEL中制作的上述插件应正确命名为
`smrBgm229GallonsGross/smrEgm229GallonsGross` because. This is a MUST for the Delphi application to function properly.
这个Delphi-4应用程序提取并与DB串联化DATA表格。
我的Delphi-4应用程序正常工作(检查/插入/检索),因此当前开始加仑牛奶gm229''的当前月份等于结束最近加仑牛奶gm229’‘的最后几个月,然后如果它们不同则抛出异常。
gm229''的当前月份等于结束最近加仑牛奶
Excel工作表:-Bgm167GrosGalnsDA / Egm160GrosGalnsDA Delphi代码(DB-输入/ DB- 输出/验证):-bgm229 / egm229 SQL 2005 DB:-bgm167DA / egm167DA 实际上,我添加的列应已 命名为“ smrEgm133GallonsGross / smr。 。我 搞砸了他们的名字,他们现在正在生产中…。
在Delphi程序中,对于初始清单,其代码为
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133'); ExtractFormBgmInfo(smrMilkDe, 'smrBgm167');
对于结束库存的代码是
ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133'); ExtractFormEgmInfo(smrMilkDe, 'smrEgm167');
我在列表中添加了mrBgm229GrosGalns / smrEgm229GrosGalns'',但问题是它们在EXCEL表中被错误地命名为mrBgm167GrosGalnsDA / smrEgm167GrosGalnsDA’‘,而它们被命名为’smB’mm(29)就像在Delphi代码中一样)。因此。我在上面添加了…
mrBgm229GrosGalns / smrEgm229GrosGalns'',但问题是它们在EXCEL表中被错误地命名为
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133'); ExtractFormBgmInfo(smrMilkDe, 'smrBgm167'); ExtractFormBgmInfo(smrMilkDyedDe, 'smrBgm229'); ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133'); ExtractFormEgmInfo(smrMilkDe, 'smrEgm167'); ExtractFormEgmInfo(smrMilkDyedDe, 'smrEgm229');
这会引发错误,因为EXCEL工作表中未定义smrBgm229GallonsGross / smrEgm229GallonsGross 。因此,问题是 如何将Excel工作表中的“ mrBgm167GrosGalnsDA”转换为“ mrBgm229GallonsGross” ,然后使我的“ xtract”正确。 ?
请帮忙安排今天的发布,并与我的上司讨论
您要做的是 将 一个字符串 映射 到另一个字符串。您可以为此使用一个简单的字符串列表。
// Declare the variable somewhere, such as at unit scope or as a field // of your form class var ColumnNameMap: TStrings;
// Somewhere else, such as unit initialization or a class constructor, // initialize the data structure with the column-name mappings. ColumnNameMap := TStringList.Create; ColumnNameMap.Values['Bgm167 GrosGalns DA'] := 'bgm229/ egm229';
// In yet a third place in your code, use something like this to map // the column name in your input to the real column name in your output. i := ColumnNameMap.IndexOfName(ColumnName); if i >= 0 then RealColumnName := ColumnNameMap.Values[ColumnName] else RealColumnName := ColumnName;
更高版本的Delphi具有泛型TDictionary类。使用TDictionary<string, string>。TStrings如果任何列名称中都可以包含等号,那么我上面概述的解决方案将遇到问题,但是您可以通过更改NameValueSeparator属性来缓解这种情况。
TDictionary
TDictionary<string, string>
TStrings
NameValueSeparator
var ColumnNameMap: TDictionary<string, string>;
ColumnNameMap := TDictionary<string, string>.Create; ColumnNameMap.Add('Bgm167 GrosGalns DA', 'bgm229/ egm229');
if not ColumnNameMap.TryGetValue(ColumnName, RealColumnName) then RealColumnName := ColumnName;