我正在尝试在用户选择网络名时显示用户图片,但是当我尝试查找他们的图片时,我会收到一条错误消息,例如;
Could not find file 'S:\Picture\Chris .jpg'.
你可能已经知道有很多空格,所以我尝试了这个,其中每个空格都将在netname中用“a”替换;
string dbfQuery = "SELECT em_pplid, em_name, STRTRAN(em_netname, ' ', 'a'), em_surname FROM employs WHERE em_netname NOT LIKE ''";
当然,我开始收到类似的新错误消息;
Could not find file 'S:\Picture\Chrisaaaaaaaaaaaaaaa.jpg'.
您会立即认为将STRTRAN(em_netname, ' ', 'a')
更改为STRTRAN(em_netname, ' ', '')
会删除所有空格。虽然这在一定程度上起作用,但首先如果有不止一个克里斯,例如“ChrisB”和“ChrisC”,他们现在都变成了“克里斯”。
要添加到此,一些空格不会被删除,例如我仍然会收到错误说法;
Could not find file 'S:\Picture\YenT .jpg'.
即在某些情况下还有一个空间。
这有什么理由吗?我是否正确使用STRTRAN?我认为可能的一件事是,除了空格之外还有其他隐藏的,不可打印的字符,但不会用“a”替换它们留下空格?
答案 0 :(得分:5)
不要在那里使用StrTran()或任何其他函数。乍一看,使用的适当函数是Trim()或Rtrim()。但是,VFP并不真正支持不同的字符大小,这会导致字段大小设置为它找到的第一个记录的内容(因此如果它首先找到Chris,那么任何比Chris长的名称都会被截断为5个字符。任何少于5的数据仍然有尾随空格。)
根据strtran(),它不仅会替换尾随空格而是替换字符串中的任何空格字符。
因此,不要使用任何函数,而是先进行简单的选择:
string dbfQuery = @"SELECT em_pplid, em_name, em_netname, em_surname
FROM employs
WHERE em_netname NOT LIKE ''";
然后处理C#代码中的值。例如,如果您使用的是阅读器:
var pictureFileName = string.Format(@"s:\Picture\{0}.jpg",
((string)reader["em_netname"]).Trim());