Как импортировать txt файл с xml ответами в гугл листы с помощью скрипта Google Apps? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть файл 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 для получения результата. Я думаю, что идеальным было бы импортировать файл и для каждой строки проверять, является ли это ответом xml, если он импортируется в листы Google. Спасибо, если кто-нибудь может дать мне несколько указаний о том, как получить то, что я хочу. Я исследовал, но не смог найти ни одного примера такого типа.

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'),
...

Я знаю, импортировать текстовый файл, но не могу понять, как извлечь только ответ XML

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Основываясь на ответе @ Купера, я предложил следующее решение:

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);
}

Возможно, не самый лучший способ, но он работает, и, поскольку я не нашел другого решения, он остается для тех, кто ищет что-то подобное.

0 голосов
/ 09 мая 2019

Извлечение нужных данных из log.txt

Вам необходимо указать идентификатор файла.

Это был мой файл url: https://anyfile-notepad.semaan.ca/app#edit/GoogleDrive/1KTusR1iiQQHB1lXQfYDh2MEjDHEOsdNm

Идентификатор - это строка после последней косой черты.

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.filter

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...