我的客户需要将文本文件导入系统,但他们的文本文件是管道分隔的“|”。他们还需要将一些数据导出为相同的格式(管道分隔)。我被要求使用 Powerbuilder 12。是否可以直接使用 PipeDelimited 文本文件导入文件?我想跳过“FOR LOOP MID GET”方法,直接去 importfile 然后更新()。dw.saveas() 也是如此。
问问题
4207 次
2 回答
0
据我所知,我们对导入并不幸运,因为我们无法定义分隔符,但这里有一个解决方法:
- 将文件读入字符串变量
- 更换管道 | 逗号,
- 将字符串作为 CSV 导入 dw
我为你做了一个小测试应用程序,它工作。我的文本文件是这样的:
Col1|Col2|Col3
aaa|bbb|ccc
这是导入代码:
string ls_import, ls_export
long ll_filehandle, ll_readbytes
// IMPORT
ll_filehandle = FileOpen("d:\Work\StackExchange\pipes.txt", TextMode!)
ll_readbytes = FileReadEx(ll_filehandle, ls_import)
if ll_filehandle = -1 or IsNull(ll_filehandle) then
else
ls_import = f_glo_replace_all(ls_import, "|", ",")
dw_1.ImportString(CSV!, ls_import)
end if
随着出口,我们有更多的运气。有一个 datawindow 方法,您可以在其中自定义导出的分隔符:
所以导入看起来像这样:
dw_1.SaveAsFormattedText("d:\Work\StackExchange\export_pipes.txt", EncodingANSI!, "|")
当然你需要全局替换函数的代码:
这是来源:
global type f_glo_replace_all from function_object
end type
forward prototypes
global function string f_glo_replace_all (string source, string look_for, string replace_with)
end prototypes
global function string f_glo_replace_all (string source, string look_for, string replace_with);/*A String Occurrence Search and Replace RoutineThe following code demonstrates a string occurrence search and replaceroutine.This routine works generically for any string. For example,if old_str = "red" and new_str ="green", all occurrences of "red" inside of mystring will be replaced with "green".
Parameters
Name = source Type = String
Name = look_for Type = String
Name = replace_with Type = String
*/
int start_pos=1,len_look_for
len_look_for = len(lower(look_for))
//find the first occurrence of look_for ...
start_pos = Pos(lower(source),lower(look_for), start_pos)
//only enter the loop if you find whats in look_for
DO WHILE start_pos > 0
//replace look_for with replace_with ...
source = Replace(source,start_pos,Len_look_for,replace_with)
//find the next occurrence of
start_pos = Pos(lower(source), lower(look_for), start_pos+Len(replace_with))
LOOP
return source
end function
我希望这有帮助!
兄弟。加博尔
于 2013-03-13T07:29:47.373 回答
0
不,这不可能是你想要的方式。您需要编写自己的 ImportFile 版本,抱歉这不是您想要的答案。
于 2013-04-26T11:09:37.580 回答