2016-11-04 3 views
0

Salut j'utilise PB 12 et j'ai des problèmes avec SaveasFormattedTextPowerbuilder-Retirer dernier séparateur

Le funcion fonctionne bien, mais le séparateur ombles ajouter un caractère à la fin de chaque ligne et je dois supprimer le dernier séparateur.

Par exemple, les données d'exportation saveasformattedtext comme celui-ci:

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

Et j'ai besoin comme ceci:

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

sans ";" à la fin.

ce mon code:

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

S'il vous plaît aider

Répondre

1

Essayez la fonction ci-dessous. Vous voudrez peut-être ajouter une vérification d'erreur et plus d'options selon vos besoins. L'idée est de sauvegarder chaque ligne séparément en tant que ligne dans le fichier.

/*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

Merci beaucoup, votre fonction fonctionne parfaitement ... –

0

Vous pouvez écrire une fonction pour remplacer une combinaison de "qui est concaténer avec char (10) char (13)" à seulement char (10) char (13). (Je pourrais avoir les codes ASCII CR/LF inversés ici).

Here is this answer

Here is a possible solution: