Quantcast
Channel: Microsoft Dynamics 365 and Power Platform Library
Viewing all articles
Browse latest Browse all 102

AX 2012: Reading files from directory through X++

$
0
0
Following code can be used to read files from the specified path. With this example, I am reading a CSV files from a directory.

Class declaration











class readFilesFromDirectory extends RunBase






{




    FilePath            filePath;



    Filename            filename;


    CommaTextIo         fileIO;




    Set                 fileSet;


    CommaIo             commaIo;


    str                 currentFile;




    container           lineCon;




    #File


    #AviFiles




}








main method











Publicstatic
void main(Args _args)






{




    readFilesFromDirectory  readFiles =
readFilesFromDirectory::construct();





    readFiles.readFilesFromDirtecory();

}







Construct












Publicstatic
readFilesFromDirectory construct()






{




    return
new readFilesFromDirectory();


}







readFileFromDirectory method












privatevoid
readFilesFromDirtecory()






{




    SetEnumerator           sE;



    int                     row = 1;




    filePath = @"C:\Temp\FilesToRead";




    this.getFiles();




    sE = fileSet.getEnumerator();




    while
(sE.moveNext()) // loop through all files


    {


        filename = sE.current();




        this.openFile();




        while(this.readLine())
// loop through all lines from current file


        {


            this.processRow(row, lineCon);




            row++;


        }


    }


}








getFiles method












privatevoid
getFiles()


{


    System.String[]                 files;


    System.Collections.IEnumerator  enumerator;


    str
file;





    try


    {


        fileSet = new
Set(Types::Container);





        files =
System.IO.Directory::GetFiles(filePath, '*.csv');


        enumerator = files.GetEnumerator();





        while
(enumerator.MoveNext())


        {


            file = enumerator.get_Current();





            fileSet.add([file]);


        }





    }


    catch
(Exception::Internal)


    {


        this.processCLRErrorException();


    }


    catch
(Exception::CLRError)


    {


        this.processCLRErrorException();


    }

}








openFile method












privatevoid
openFile()






{




    FileIOPermission fileIOPermission;





    fileIOPermission = new FileIOPermission(filename, #io_read);


    fileIOPermission.assert();




    commaIo = new
CommaIo(filename, #io_read);


    if
(commaIo && commaIo.status() == IO_Status::Ok)


    {


       
commaIo.inRecordDelimiter(#delimiterCRLF);


    }


    else


    {


        throw
error(strFmt("Error when opening file %1", filename));


    }

}







readLine method











privateboolean
readLine()






{




    boolean
readLine;





    if
(commaIo && commaIo.status() == IO_Status::Ok)


    {


        lineCon = commaIo.read();


        readLine = lineCon != conNull();


    }


    else


    {


        lineCon = conNull();


        readLine = false;


    }




    return
readLine;


}








processRow method











privatevoid
processRow(int _rowIdx, container 
_row)






{




    //conpeek(_row,
1);



    //conpeek(_row,
2);


    //conpeek(_row,
3);


    //conpeek(_row,
4);


    //conpeek(_row,
5);


    //conpeek(_row,
6);


    //conpeek(_row,
7);


    //conpeek(_row,
8);


    //conpeek(_row,
9);


    //conpeek(_row,
10);


}








processCLRErrorException method







privatevoid
processCLRErrorException(


    boolean
_throw = true


    )


{


    str
strError;


    CLRObject exc;


    CLRObject innerExc;


    CLRObject clrExcMessage;




    exc = CLRInterop::getLastException();


    if
(exc)


    {


        clrExcMessage = exc.get_Message();


        innerExc = exc.get_InnerException();




        while
(innerExc != null)


        {


            clrExcMessage =
innerExc.get_Message();


            innerExc =
innerExc.get_InnerException();


        }




        strError =
CLRInterop::getAnyTypeForObject(clrExcMessage);




        error(strError);




        if (_throw)


        {


            throw
error("Update has been cancelled");


        }


    }


}










Viewing all articles
Browse latest Browse all 102

Trending Articles