1. 程式人生 > >ABAP讀取檔案 兩種檔案

ABAP讀取檔案 兩種檔案

 ABAP讀取文字檔案分兩種情況:第一種是本地文字檔案,第二種是伺服器文字檔案。它讀取方式不一樣,本地檔案可以直接用 CALL FUNCTION 'WS_UPLOAD'來實現,

然再進行處理,伺服器讀取檔案需要用OPEN DATASET來讀取,然後再進行處理。以下是兩種讀取方式的程式碼:

一、呼叫的程式碼:

PARAMETERS:P_FLNAME  LIKE RLGRAP-FILENAME LOWER CASE .

本地文字檔案:    PERFORM FRM_GET_DATA TABLES IT_ITAB 

                                                                                      USING

  P_FLNAME 

                                                                                                    '0'.

伺服器文字檔案:PERFORM FRM_GET_FILE_FRM_SERVER TABLES IT_ITAB 

                                                                                                                  USING P_FLNAME

                                                                                                                                 '0'.

二、兩種讀取方式:

(1)讀取本地文字檔案,引數說明:P_ITAB--讀取檔案存放內表,P_FILENAME--檔案所在目錄,P_STARTLINE--讀取檔案的起始行。

FORM FRM_GET_DATA TABLES P_ITAB USING  P_FILENAME LIKE RLGRAP-FILENAME P_STARTLINE.

  DATA

:FRM_IT_DATA TYPE STRING OCCURS 0 WITH HEADER LINE,
       FRM_IT_FIELD TYPE STRING OCCURS 0 WITH HEADER LINE,
       FRM_TABCHAR TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  FIELD-SYMBOLS <FRM_FIELD> TYPE ANY.

  IF P_FILENAME IS INITIAL.
    RETURN.
  ENDIF.

  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME                = P_FILENAME
      FILETYPE                = 'ASC'
    TABLES
      DATA_TAB                = FRM_IT_DATA
    EXCEPTIONS
      CONVERSION_ERROR        = 1
      FILE_OPEN_ERROR         = 2
      FILE_READ_ERROR         = 3
      INVALID_TYPE            = 4
      NO_BATCH                = 5
      UNKNOWN_ERROR           = 6
      INVALID_TABLE_WIDTH     = 7
      GUI_REFUSE_FILETRANSFER = 8
      CUSTOMER_ERROR          = 9
      NO_AUTHORITY            = 10
      OTHERS                  = 11.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RETURN.
  ENDIF.

  LOOP AT FRM_IT_DATA.
    IF SY-TABIX < P_STARTLINE.
      CONTINUE.
    ENDIF.

    SPLIT FRM_IT_DATA AT FRM_TABCHAR INTO TABLE FRM_IT_FIELD.
    CLEAR P_ITAB.
    LOOP AT FRM_IT_FIELD.
      ASSIGN COMPONENT SY-TABIX OF STRUCTURE P_ITAB TO <FRM_FIELD>.
      <FRM_FIELD> = FRM_IT_FIELD.
    ENDLOOP.

    IF P_ITAB IS NOT INITIAL.
      APPEND P_ITAB.
    ENDIF.

  ENDLOOP.

ENDFORM.       

(2)讀取伺服器文字檔案,引數說明:P_ITAB--讀取檔案存放內表,P_FILENAME--檔案所在目錄,P_STARTLINE--讀取檔案的起始行。

FORM FRM_GET_FILE_FRM_SERVER TABLES P_IT_ITAB USING P_FILENAME P_DATALINE.
  DATA:FRM_L_REPCHAR     TYPE EDI_REPCHR,
       FRM_L_OS_MESSAGE(200),
       FRM_DATASET(100)..
  DATA: FRM_WA TYPE STRING.
  DATA: FRM_TAB VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,"獲得跳格符.
        FRM_ENT VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF."獲得跳格符.
  DATA: FRM_IT_DATA TYPE STRING OCCURS 0 WITH HEADER LINE.
  DATA: FRM_IT_TAB_ROWNUM TYPE I.
  FIELD-SYMBOLS <FRM_FILED>.

  FRM_DATASET = P_FILENAME.
  CONDENSE FRM_DATASET NO-GAPS.

  "開啟檔案
  OPEN DATASET FRM_DATASET FOR INPUT IN TEXT MODE ENCODING NON-UNICODE
        REPLACEMENT CHARACTER FRM_L_REPCHAR MESSAGE FRM_L_OS_MESSAGE.

  IF SY-SUBRC NE 0.
    RETURN.
  ENDIF.

  REFRESH P_IT_ITAB.

  "迴圈讀取檔案,處理轉換成格式
  DO.

    "讀取資料
    READ DATASET FRM_DATASET INTO FRM_WA.
    IF SY-SUBRC NE 0.
      EXIT.
    ENDIF.

    IF SY-INDEX < P_DATALINE.
      CONTINUE.
    ENDIF.

    "替換回車符為空格
    REPLACE FRM_ENT WITH '' INTO FRM_WA.
    CONDENSE FRM_WA.
    IF FRM_WA IS INITIAL OR FRM_WA = ''.
      CONTINUE.
    ENDIF.

    "拆分欄位
    SPLIT FRM_WA AT FRM_TAB INTO TABLE FRM_IT_DATA.

    FRM_IT_TAB_ROWNUM = LINES( FRM_IT_DATA ).

    LOOP AT FRM_IT_DATA.

      ASSIGN COMPONENT SY-TABIX OF STRUCTURE P_IT_ITAB TO <FRM_FILED>.
      <FRM_FILED> = FRM_IT_DATA.

    ENDLOOP.

    APPEND P_IT_ITAB.
  ENDDO.

ENDFORM.     

相關推薦

ABAP讀取檔案 檔案

 ABAP讀取文字檔案分兩種情況:第一種是本地文字檔案,第二種是伺服器文字檔案。它讀取方式不一樣,本地檔案可以直接用 CALL FUNCTION 'WS_UPLOAD'來實現, 然再進行處理,伺服器讀取檔案需要用OPEN DATASET來讀取,然後再進行處理。以下是兩種

springBoot使用Controller讀取配置檔案方式&讀取自定義配置方法

Controller 核心配置檔案 application.propertie web.msg=Hello! This is Controller demo; Controller:

C++ 中#include標頭檔案方式的區別

<>:先在系統目錄中尋找標頭檔案,然後再到當前目錄下找,一般用於標準的標頭檔案 stdio.h和 stdlib.h等等"  ":先在當前目錄中尋找標頭檔案,然後再到系統目錄中找,一般用於in

oracle 刪除備份檔案方式

執行後會在相同目錄下生成日誌檔案:DelExpiredLog.log現實執行的起始時間點。 @echo off rem write to log set filename=DelExpiredLog.log echo -------------------Delete Expired Log Files--

java的檔案拷貝方式

一.基礎 三種IO方式 1.傳統IO方式,基於流模型實現,提供了File抽象,輸入輸出流等,互動方式是同步,阻塞的方式,也就是說在讀寫動作完成之前,執行緒一直阻塞在那裡。 2.NIO  引入了Channel,Selector,Buffer等新的抽象,可以構建多路複用的,同步非阻

git-檔案狀態與上傳前的準備工作

1.從遠端倉庫拷貝檔案至本地倉庫 git是一個版本控制系統,能夠任意切換提交的任意版本。它的優勢在於可以通過git clone url命令將遠端專案所有資料拷貝到本地(包括歷史版本),這樣即使遠端資料崩潰,也可以通過本地push後完全恢復。 #從github倉庫grit拷貝所有歷

Mysql 匯入匯出檔案方式

下面我們要把上面的檔案匯入到資料庫中,匯入之前要確認資料庫已經在執行,即是mysqld程序(或者說服務,Windows NT下面稱為”服務“,unix下面為”程序“)已經在執行。然後執行下面的命令: bin/mysql –p < /home/mark/New_Data.sql 接著按提示輸入密碼,如果上

Spring boot配置檔案方式

[email protected](prefix = “author”) application.properties author.name=liuyuzhu author.age=31 2 @ConfigurationPropertie

Excel文件讀取方式

mar row col over lena .sh cell from column 1、Pandas from pandas import read_excel dr=read_excel(filename,header) dr#dataframe數據 dw=Da

FileInputStream讀取位元組流。讀取檔案資料的方式(寫的好)

總結:    //1讀取檔案的資料到位元組流inputStream     InputStream inputStream = new FileInputStream("D:\\demo.txt");//讀取檔案的資料到位元組流inputStream。

python 讀取wav 音訊檔案方式

  python 中,常用的有兩種可以讀取wav音訊格式的方法,如下所示: 1 import scipy 2 from scipy.io import wavfile 3 4 import soundfile as sf 5 6 fs,data = wavfile.read(

Python中讀取txt檔案可行辦法

DataTest.txt中的檔案內容,檔案最後儘量不要留空行,否則有的時候會出現error 1,2,3 4,5,6 7,8,9 第一種方式:使用 csv.reader讀取txt檔案 import csv data = [] with open('E:/DataTest.t

pyspark 讀取csv檔案建立DataFrame的方法

pyspark 讀取csv檔案建立DataFrame的兩種方法 方法一:用pandas輔助 from pyspark import SparkContext from pyspark.sql import SQLContext import pandas as pd sc

使用檔案進行讀取或輸出的方式(重定向版和fopen版)

1.重定向版//利用檔案進行讀取和輸出(重定向版) //如果想要標準輸入而檔案輸出時,只需將關於檔案輸入的語句註釋掉即可,檔案輸入標準輸出同理 //如果想回到標準輸入輸出時,只需將下一行的本地定義註釋掉

SpringBoot的properties和yml配置方式, 配置注入引數, 以及配置檔案讀取失效的問題

SpringBoot支援兩種配置方式,一種是properties檔案,一種是yml 首先在pom檔案中新增依賴: <dependency> <groupId>org.springframework.boot</gro

Java讀取檔案MD5的方案

最近要弄一下Java讀取檔案MD5,注意這裡是小檔案,網上找了一下,有兩種解決方案,一種是用MessageDigest來實現,另種是用org.apache.commons.codec.digest來實現,程式碼如下: package cdm; import java.io

SpringBoot讀取配置檔案方式以及自定義配置檔案讀取

1.讀取預設配置檔案中的資料 application.properties 直接使用@Value註解獲取資料 2.使用Environment獲取資料 防止亂碼統一編碼格式 注入Environment 使用getPro

spark讀取kafka資料(方式比較及flume配置檔案

a1.sources = r1 a1.channels = c1 a1.sinks = k1 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1 a1.channels.c1.type = memory a1.channels.c1.capacity

Spring-boot中讀取config配置檔案方式

瞭解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置檔案application.properties,當然也可以通過註解自定義配置檔案的資訊。 Spring-Boot讀取配置檔案的方式: 一.讀取核心配置檔案資訊application.p

Spring讀取property檔案配置:EL表示式和placeholder表示式

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/