2015-06-08 23 views
5

Ciao buona giornata Sono molto nuovo per PowerBuilder e sto usando PB 11.5Come importare file di testo delimitato da virgole in DataWindow (PowerBuilder 11.5)

Qualcuno può sapere come importare file di testo delimitato da virgole in DataWindow.

file di testo di esempio

"1234", "20.141.011", "Juan, Delacruz", "USA", "001.992.345,456 mila" ...

"12345", "20.141.011"," Arco, Ino "," Newyork "," 005765753256 "...

Come posso importare la terza colonna che è il nome completo e l'ultima colonna che è il numero di conto. Voglio trasferire il nome e il numero di conto nella mia finestra dati esterna. Ho provato a utilizzare ImportString (tutte le righe vengono trasferite in una colonna solo). Ho tre campi nella mia finestra di dati esterni. Il nome e il numero di conto.

Ecco il codice

ls_File = dw_2.Object.file_name[1] 
li_FileHandle = FileOpen(ls_File) 
li_FileRead = FileRead(li_FileHandle, ls_Text) 
DO WHILE li_FileRead > 0 
li_Count ++ 
li_FileRead = FileRead(li_FileHandle, ls_Text) 

ll_row = dw_1.ImportString(ls_Text,1) 

Loop. 

Please help me con il codice! Grazie

risposta

1

Sembra che PB si aspetti di default un file csv separato da tabulazioni (mentre la 'c' da 'csv' sta per 'coma' ...).

aggiungere il valore enumerato csv! negli argomenti di ImportString() e dovrebbe fissare il punto (lo fa nella mia casella di prova).

Inoltre, le colonne definite nel dataobject devono corrispondere alle colonne nel file csv (almeno per le prime colonne a cui sei interessato). Se ci sono colonne di modalità nel file csv, saranno ignorate. Ma se vuoi ottenere le colonne 1st (o 2nd) e 3rd, devi definire le prime 3 colonne. Puoi sempre nascondere il n. 1 o il n. 2 se non ne hai bisogno.

BTW, il codice ha alcuni problemi:

  1. si dovrebbe sempre verificare i valori di ritorno delle chiamate di funzione come FileOpen() per arrestare l'elaborazione in caso di file inesistente/non-leggibile
  2. Stai leggendo il file di testo due volte per la prima riga: una volta prima dello while e un altro all'interno del ciclo. O forse si intende ignorare una prima riga con le intestazioni delle colonne?

FWIF, ecco un codice di lavoro basato sul vostro:

string ls_file = "c:\dev\powerbuilder\experiment\data.csv" 
string ls_text 
int li_FileHandle, li_fileread, li_count 
long ll_row 

li_FileHandle = FileOpen(ls_File) 
if li_FileHandle < 1 then 
    return 
end if 

li_FileRead = FileRead(li_FileHandle, ls_Text) 
DO WHILE li_FileRead > 0 
    li_Count ++ 
    ll_row = dw_1.ImportString(csv!,ls_Text,1) 
    li_FileRead = FileRead(li_FileHandle, ls_Text)//read next line 
Loop 
fileclose(li_fileHandle) 
+0

È necessario utilizzare il metodo FileReadEx. –

+0

Il mio intento era solo quello di cambiare il codice dell'OP e farlo funzionare, non per sistemare tutto. In realtà il meglio sarebbe usare 'ImportFile()' per importare l'intero file in una volta invece di 'ImportString()'. PB non è molto efficiente per elaborare file di testo. – Seki

-1

uso datawindow_name.importfile(CSV!,file_path) metodo.

Problemi correlati