SuitesSript 2.0을 호출하는 서버 측 JavaScript를 실행하는 CRM 시스템 인 NetSuite에서 Google 쇼핑 피드 30,000 개 이상을 생성하려고합니다. 본질적으로, 단지 몇 가지 제한이있는 JavaScript 일뿐입니다. 나는이 제품 피드를 CSV로 출력하는 임무를 맡았습니다.쉼표와 큰 따옴표가 포함 된 문자열을 CSV에 작성
이 항목의 제품 설명에 쉼표, 큰 따옴표, 작은 따옴표 및 HTML의 양이 변수로 포함되어 있습니다. 처음에는 나에게 문제를 일으키는 단지 쉼표, 그래서 약간의 연구 후, 나는 큰 따옴표로 출력 된 문자열 포장 : 그러나
//This function isn't terribly important, but is referenced below
function sanitizeString (desc) {
var itemDesc;
if (desc) {
itemDesc = desc.replace(/(\r\n|\n|\r|\s+|\t| )/gm,' ');
itemDesc = itemDesc.replace(/,/g, '\,');
itemDesc = itemDesc.replace(/"/g, '\"');
itemDesc = itemDesc.replace(/'/g, '\'');
itemDesc = itemDesc.replace(/ +(?=)/g,'');
} else {
itemDesc = '';
}
return itemDesc;
}
var row = '';
for (var i = 0; i < columns.length; i++) {
var col = columns[i];
row += '"' + sanitizeString(val[col]) + '"';
if (i != columns.length - 1) {
row += ',';
}
}
newFeed.appendLine({value: row});
를, 이러한 따옴표가 이중으로 이상하게 상호 작용하는 것으로 보인다 비록 내 sanitizeString() 함수가 그들을 이스케이프해야하더라도, 이상한 포맷팅을 일으키는 문자열 내에서 따옴표를 사용한다. 설명에 큰 따옴표가 포함되어 있으면 언제든지 다음 행에 자체 줄이 표시되지 않습니다. 마지막 열에 추가됩니다.
그래서, 당연히, 나는 외부 이런 따옴표 탈출 : 그 상황이 완전히 엉망이 이동하게 수행row += '\"' + sanitizeString(val[col]) + '\"';
을, 항목의 많은 수에서 새로운 라인과 I 최대 푸시되지 않습니다 난 계속 허용되기 때문에 허용됩니다.
다른 자연 솔루션은 제품 설명을 편집 이동하는 것입니다,하지만 난 ... 30,000 항목에 대해 그렇게하는 것이 정말 불안하지 않다
사람이 여기에 갈 수있는 무엇을 알고 있나요? 정말 단순한 무언가가 있다는 것을 느낄 수 있습니다.
당신의 탈출 기능이 출력에 백 슬래시를 추가하기로되어있는 경우는 문자열에서 백 슬래시를 이스케이프해야합니다 '\\ '' '또는''\\' "'의 작은 따옴표를 포함하는 함수의 경우에는 '\\,'대신에 '\,' – nnnnnn
아니요, 백 슬래시를 추가하지 않아도됩니다. 최종 문자열을 얻기 위해 이스케이프 처리 만하기로되어있었습니다. 이스케이프 된 백 슬래시를 추가하면 사물이 다시 엉망이되어 새로운 줄이 추가되지 않고 따옴표가있는 줄 끝에 추가됩니다. – B1gJ4k3
"최종 문자열에 대해 이스케이프 처리"가 의미하는 것은 무엇입니까? 최종 문자열에 백 슬래시가 추가됩니다. 예를 들어, 특정 * 필드 *에 대한 입력이 'Hello, good bye'이면 출력은 'Hello \, good bye'이어야합니다.CSV의 경우 줄 바꿈을 제거하고 각 입력란을 큰 따옴표로 묶는 경우 이중 따옴표 만 이스케이프해야한다고 생각할 수 있습니다. 어떤 이유에서 전체 * 행 *을 큰 따옴표로 묶는 것처럼 보일지라도, 이는 CSV에서는 정상이 아닙니다. 샘플을 두 줄 입력하고 해당 출력을 표시하려면 질문을 편집하십시오. – nnnnnn