>source

이 구조의 레코드가있는 log.txt 파일이 있습니다 :

20190509 131952 CON  Parametros: [abc....]
20190509 131952 CON  Changing Endpoint to https:.....
20190509 131952 INF  SQL: select .....
20190509 131952 CON  Outbound with header: 
<S:Envelope xmlns:S="http://schemas.........</S:Envelope>

XML 응답으로 줄을 추출하고 싶었습니다. <S:Envelope xmlns:S="http://schemas.........</S:Envelope>   해당 열의 데이터가 포함 된 Google 시트로 가져옵니다.

앱 스크립트 전문가가 아니며 XmlService를 사용하여 결과를 얻는 방법을 알 수 없습니다. 파일을 가져 오는 것이 이상적이라고 생각합니다 .Google 시트로 가져 오는 경우 XML 응답인지 확인하십시오. 누구든지 내가 원하는 것을 얻는 방법에 대한 지침을 줄 수 있다면 고맙습니다. 조사했지만이 유형의 예를 찾을 수 없습니다.

function Importa() {
  var PastaAMonitorizar = DriveApp.getFolderById('abc_xyz'); // id da pasta onde txt está quardado
  var ss = SpreadsheetApp.openById('abc_xyz'); //id da folha para onde são importados os dados
  var files = PastaAMonitorizar.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var fileName = file.getName();
    var targetRng = ss.getSheetByName("INFO"),
        fileTextObj = file.getAs('text/plain'),
        fileText = fileTextObj.getDataAsString('ISO-8859-1'),
        lines = fileText.split('\n'),
...

txt 파일 가져 오기를 알고 있지만 XML 응답 만 추출하는 방법을 알 수 없습니다


  • 답변 # 1

    log.txt에서 원하는 데이터 추출

    fileId를 제공해야합니다.

    이것은 내 파일 URL입니다 : https://anyfile-notepad.semaan.ca/app#edit/GoogleDrive/1KTusR1iiQQHB1lXQfYDh2MEjDHEOsdNm

    id는 마지막 슬래시 뒤의 문자열입니다.

    function extractData() {
      var file=DriveApp.getFileById('fileId');
      var content=file.getBlob().getDataAsString();
      var a1=content.split('\n');
      var a2=a1.filter(function(elem){return (elem.slice(0,1)=='<')});
      return a2;//and array of your desired strings
    }
    
    

    배열 필터

    Array.slice

    이것은 간단한 대화 상자에 결과를 표시합니다 :

    function extractData() {
      var file=DriveApp.getFileById('fileId');
      var content=file.getBlob().getDataAsString();
      var a1=content.split('\n');
      var a2=a1.filter(function(elem){return (elem.slice(0,1)=='<')});
      var html='';
      for(var i=0;i<a2.length;i++) {
        html+='<br />' + a2[i].replace(/[\u00A0-\u9999<>\&]/gim, function(j) {return '&#'+j.charCodeAt(0)+';';})
      }
      var userInterface=HtmlService.createHtmlOutput(html);
      SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Desired Strings')
    }
    
    
    이 코드 : replace(/[\u00A0-\u9999<>\&]/gim, function(i) {return '&#'+i.charCodeAt(0)+';';})  @Chris Baker에서 제공합니다.

  • 답변 # 2

    @Cooper의 답변을 바탕으로이 솔루션을 찾았습니다.

    function extractD() {
      var file = DriveApp.getFileById('xyz_abc');
      var content = file.getBlob().getDataAsString();
      var a1 = content.split('\n').filter(function(elem){return (elem.slice(0,1)=='<')}),
          a11 = [];
      a1 = a1.map(function(x){ return x.replace(/\u003c\u002f/g,"\u003e")});
      a1.forEach(function(y) { a11.push(y.split('\u003e'));}); 
      var a2 = a11.map(function(e){return [e[2].replace('<',''),//A
                                           e[6].slice(0,19).replace('T',' '),//B
                                           e[30],e[31]]});
      Logger.log(a2)
      SpreadsheetApp.openById("abc_xyz").getSheetByName("1").getRange(1, 1,a2.length, a2[0].length)
      .setValues(a2);
    }
    
    

    아마도 최선의 방법은 아니지만 효과가 있으며 다른 해결책을 찾지 못해 비슷한 것을 찾는 사람들에게 남아 있습니다.

관련 자료

  • 이전 툴팁이있는 시맨틱 UI 버튼 로딩 상태
  • 다음 자바 스크립트는 HTML에서 행을 추가하고 여러 행을 계산합니다