2016-11-04 21 views
0

こんにちは私はPB 12を使用していると私はSaveasFormattedText最後のセパレータをPowerBuilderは、削除

funcionはうまく動作しますが、区切り文字は、各行の終わりに1つの文字を追加し、私は最後に削除する必要があるとの問題を抱えていますセパレータ。例えば

、このようなsaveasformattedtextエクスポートデータ:

data1;data2;data3;data4; 
data1;data2;data3;data4; 
etc. 

そして、私はこのような必要があります。

data1;data2;data3;data4 
data1;data2;data3;data4 

なし ";"最後に。

この私のコードは:

dw_report.SaveAsFormattedText("d:/RESULTS2.TXT", EncodingUTF8! , "|", "","~r~n",True) 

あなたがの組み合わせを交換する関数を記述することができます

答えて

1

以下の機能を試してみてください。必要に応じていくつかのエラーチェックやオプションを追加することができます。その考え方は、各行をファイル内の行として別々に保存することです。

/*function: f_dw_saveasformattedtext(dw_1, ls_filename, ';') 
parameters: adw_dw(datawindow/datastore), as_filename (string), as_separator(string) 
*/ 
long ll_row, ll_rows, ll_colcount, ll_colindex 
string ls_colname, ls_coltype, ls_value, ls_lineval 
int li_filenum 
any la_anyval 

ll_rows = adw_dw.rowcount() 
ll_colcount = long(adw_dw.Describe("DataWindow.Column.Count")) 
li_filenum = FileOpen(as_filename, LineMode!, Write!, LockWrite!, Append!) 
if li_filenum = -1 or isnull(li_filenum) = true then 
    return -1 
end if 
for ll_row = 1 to ll_rows 
    ls_lineval = '' 
    for ll_colindex = 1 to ll_colcount 
     ls_colname = adw_dw.describe("#" + string(ll_colindex) + ".Name") 
     ls_coltype = adw_dw.Describe (ls_colname + ".ColType") 
     CHOOSE CASE Lower (Left (ls_coltype , 5)) 
       CASE "char(", "char","strin"  // CHARACTER DATATYPE 
        la_anyval = adw_dw.GetItemString (ll_row, ls_colname) 
       CASE "date"     // DATE DATATYPE 
        la_anyval = adw_dw.GetItemDate (ll_row, ls_colname) 
       CASE "datet"    // DATETIME DATATYPE 
        la_anyval = adw_dw.GetItemDateTime (ll_row, ls_colname) 
       CASE "decim"    // DECIMAL DATATYPE 
        la_anyval = adw_dw.GetItemDecimal (ll_row, ls_colname) 
       CASE "numbe", "long", "ulong", "real", "int"    // NUMBER DATATYPE 
        la_anyval = adw_dw.GetItemNumber (ll_row, ls_colname) 
       CASE "time", "times"  // TIME DATATYPE 
        la_anyval = adw_dw.GetItemTime (ll_row, ls_colname) 
       CASE ELSE     
        SetNull (la_anyval) 
     END CHOOSE 
     ls_value = string(la_anyval) 
     if trim(ls_lineval) = '' then 
      ls_lineval = ls_value 
     else 
      ls_lineval += as_separator + ls_value 
     end if 
    next //columns 
    FileWrite(li_filenum, ls_lineval) 
next //rows 

return 1 
+1

ありがとうございます、あなたは完璧に機能します... –

0

助けてください。唯一のことを "それがcharと を連結している(10)CHAR(13)" char(10)char(13)。 (私は CR/LF ASCIIコードをここで逆にしているかもしれません)。

Here is this answer

Here is a possible solution:

関連する問題