Spaces:
Running
Running
Update app.js
Browse files
app.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
/* v10.4: Smarter splitting using all labels + multi-line "ููุน ุงูู
ุดููุฉ" block */
|
| 2 |
|
| 3 |
const EXPORT_COLUMNS = [
|
|
@@ -138,24 +139,41 @@ function findBlockAfterLabel(text, labels, allLabels = START_LABELS){
|
|
| 138 |
function splitTickets(raw){
|
| 139 |
const text = normalizeText(raw);
|
| 140 |
if(!text) return [];
|
|
|
|
| 141 |
if(TICKET_SEP.test(text)){
|
| 142 |
return text.split(TICKET_SEP).map(p=>p.trim()).filter(Boolean);
|
| 143 |
}
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
|
|
|
|
|
|
| 148 |
const parts=[];
|
| 149 |
-
for(let i=0;i<
|
| 150 |
-
const s =
|
| 151 |
-
const e = i+1<
|
| 152 |
const slice = text.slice(s,e).trim();
|
| 153 |
if(slice) parts.push(slice);
|
| 154 |
}
|
| 155 |
-
return parts;
|
| 156 |
}
|
|
|
|
| 157 |
const blocks = text.split(/\n\s*\n+/).map(p=>p.trim()).filter(Boolean);
|
| 158 |
-
if(blocks.length>1) return blocks;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
return [text];
|
| 160 |
}
|
| 161 |
|
|
@@ -166,7 +184,6 @@ function extractFields(ticketText){
|
|
| 166 |
"ุฑูู
ุงููููุฉ":"", "ุฑูู
ุงูุฌูุงุฒ":"", "ุฑูู
ุงูุฌูุงู":"", "ุงูู
ุณุญ":"", "ุงูู
ูุทูุฉ":""
|
| 167 |
};
|
| 168 |
|
| 169 |
-
// ููุน ุงูู
ุดููุฉ: ุงูุชูุท ุจููู ู
ุชุนุฏุฏ ุงูุฃุณุทุฑ ุญุชู ุฃูุฑุจ ููุจู ุชุงูู
|
| 170 |
let v = findBlockAfterLabel(text, FIELD_ALIASES["ููุน ุงูู
ุดููุฉ"], START_LABELS);
|
| 171 |
if(v) out["ููุน ุงูู
ุดููุฉ"] = normalizeText(v);
|
| 172 |
|
|
|
|
| 1 |
+
// app.js
|
| 2 |
/* v10.4: Smarter splitting using all labels + multi-line "ููุน ุงูู
ุดููุฉ" block */
|
| 3 |
|
| 4 |
const EXPORT_COLUMNS = [
|
|
|
|
| 139 |
function splitTickets(raw){
|
| 140 |
const text = normalizeText(raw);
|
| 141 |
if(!text) return [];
|
| 142 |
+
|
| 143 |
if(TICKET_SEP.test(text)){
|
| 144 |
return text.split(TICKET_SEP).map(p=>p.trim()).filter(Boolean);
|
| 145 |
}
|
| 146 |
+
|
| 147 |
+
const startsAll = findStartsByLabels(text, START_LABELS).sort((a,b)=>a-b);
|
| 148 |
+
const filtered = startsAll.filter((pos,i,arr)=> i===0 || (pos - arr[i-1]) >= MIN_SPLIT_SPAN);
|
| 149 |
+
const useThese = (filtered.length >= 2) ? filtered : (startsAll.length >= 2 ? startsAll : []);
|
| 150 |
+
|
| 151 |
+
if(useThese.length >= 2){
|
| 152 |
const parts=[];
|
| 153 |
+
for(let i=0;i<useThese.length;i++){
|
| 154 |
+
const s = useThese[i];
|
| 155 |
+
const e = i+1<useThese.length ? useThese[i+1] : text.length;
|
| 156 |
const slice = text.slice(s,e).trim();
|
| 157 |
if(slice) parts.push(slice);
|
| 158 |
}
|
| 159 |
+
if(parts.length) return parts;
|
| 160 |
}
|
| 161 |
+
|
| 162 |
const blocks = text.split(/\n\s*\n+/).map(p=>p.trim()).filter(Boolean);
|
| 163 |
+
if(blocks.length > 1) return blocks;
|
| 164 |
+
|
| 165 |
+
const niu = findStartsByLabels(text, ["ููุน ุงูู
ุดููุฉ","ููุน ุงูู
ุดููู"]).sort((a,b)=>a-b);
|
| 166 |
+
if(niu.length >= 2){
|
| 167 |
+
const parts=[];
|
| 168 |
+
for(let i=0;i<niu.length;i++){
|
| 169 |
+
const s = niu[i];
|
| 170 |
+
const e = i+1<niu.length ? niu[i+1] : text.length;
|
| 171 |
+
const slice = text.slice(s,e).trim();
|
| 172 |
+
if(slice) parts.push(slice);
|
| 173 |
+
}
|
| 174 |
+
if(parts.length) return parts;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
return [text];
|
| 178 |
}
|
| 179 |
|
|
|
|
| 184 |
"ุฑูู
ุงููููุฉ":"", "ุฑูู
ุงูุฌูุงุฒ":"", "ุฑูู
ุงูุฌูุงู":"", "ุงูู
ุณุญ":"", "ุงูู
ูุทูุฉ":""
|
| 185 |
};
|
| 186 |
|
|
|
|
| 187 |
let v = findBlockAfterLabel(text, FIELD_ALIASES["ููุน ุงูู
ุดููุฉ"], START_LABELS);
|
| 188 |
if(v) out["ููุน ุงูู
ุดููุฉ"] = normalizeText(v);
|
| 189 |
|