PowerBuilder 覆盖 txt 文件以使其制表符分隔

PowerBuilder overwrite txt file to make it tab separated

我有一个简单的问题,但我现在很忙,我想知道是否有人可以帮助我,

我需要 PB 中的代码部分,它将覆盖 txt 文件并使其以制表符分隔。

考虑一个 insert.txt 文件,格式如下

533#0000000000007851

594#0000000000006937

36#0000000000005667

.....

我想用PB代码覆盖它,做成这样

533 0000000000007851

594 0000000000006937

36 0000000000005667

......

因此 # 将被删除并成为选项卡...

我希望你能理解这个问题

请帮我一些忙,任何帮助将不胜感激

提前致谢

我想我找到了方法,如果我错了请指正

  1. 使用 importfile 将所有数据插入到单个列中的数据存储中
  2. 逐行找到 # 并将其替换为制表符,然后将 2 个新值插入另一个 ds
  3. 导出文件

以上是否正确?

您的回答是正确的,但可以更简单。

1) 将文件导入为单列

2) 解析每行中的值以查找类似于此的“#”:

integer li
string ls_a, ls_b, ls_rowvalue
FOR li = 1 TO dw_import.Rowcount()
  ls_rowvalue = dw_import.object.columnwithdata[li]
  ls_a = Right(ls_rowvalue, Pos(ls_rowvalue, "#") - 1)
  ls_b = Mid(ls_rowvalue, Pos(ls_rowvalue, "#") + 1)
  //put the values into a new datawindow
NEXT
dw_newvalues.Saveas("C:\temp\newstuff.txt)

默认'saveas'类型是文本!这是制表符分隔的。

   for li=1 to lds_cons_buffer.rowcount()

            //if the file is tab seperated
            ls_data1 = lds_cons_buffer.getitemstring(li, 'v_data1')     
            ls_data2 = lds_cons_buffer.getitemstring(li, 'v_data2')

            //if the file is not tab seperated but like this 533#0000000000007851....
            if isnull(ls_data2) and Match(ls_data1, "#") then
                    ll_length = Len(ls_data1)
                    ll_length_left = Pos(ls_data1, "#") -1  
                    ll_length_right  = ll_length - Pos(ls_data1, "#")
                    ls_data1_temp  = Left(ls_data1, ll_length_left)
                    ls_data2_temp  =Right(ls_data1, ll_length_right)
                    ls_data1 = ls_data1_temp
                    ls_data2 = ls_data2_temp
            end if
     next

ImportFile 在简单性方面建议 win,但前提是您知道每行的最大长度,并且将整个文件加载到内存中两次(尽管这会忽略 DW/DS 上的磁盘存储选项) 不是问题。

为了最小的内存占用,我会考虑在源文件上使用 FileOpen/FileRead 函数,以 LineMode 读取文件,解析每一行(PFC 具有全局字符串替换功能),并将结果写入 FileWrite 到一个临时文件。然后,最后,将您的源重命名为 .BAK(或类似的东西......破坏某人的数据......)并将临时文件重命名为源文件的名称。

这个选项肯定是多劳多得,但又是另外一条上山路。你的地图越好,你到达那里的机会就越大。