我有一个带有此结构的记录的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响应
从log.txt
提取所需的数据您需要提供文件ID。
这是我的文件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.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')
}
此代码:@chris Baker提供的replace(/[u00A0-u9999<>&]/gim, function(i) {return '&#'+i.charCodeAt(0)+';';})
。
基于 @库珀的回应,我想到了这个解决方案:
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(/u003cu002f/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);
}
可能不是最好的方法,但它可以正常工作,并且由于我没有找到其他解决方案,因此它留给那些正在寻找类似物品的人。