АДРЕСНЫЙ РЕЖИМ - M2.3c тюнинг резолвинга и фильтров адресных запросов, поэтапная диагностика и аудит фильтрации по счету

This commit is contained in:
2026-03-29 21:51:09 +03:00
parent 2bf16de4ea
commit a2886faed6
37 changed files with 3050 additions and 151 deletions
@@ -58,22 +58,38 @@ function parseRowsFromTextTable(source: string): Array<Record<string, unknown>>
}
const rows: Array<Record<string, unknown>> = [];
const parseCsvLine = (line: string): string[] => {
const values: string[] = [];
let current = "";
let inQuotes = false;
for (let index = 0; index < line.length; index += 1) {
const char = line[index];
if (char === '"') {
if (inQuotes && line[index + 1] === '"') {
current += '"';
index += 1;
continue;
}
inQuotes = !inQuotes;
continue;
}
if (char === "," && !inQuotes) {
values.push(current.trim());
current = "";
continue;
}
current += char;
}
values.push(current.trim());
return values;
};
const lines = body
.split("\n")
.map((line) => line.trim())
.filter(Boolean);
for (const line of lines) {
const values: string[] = [];
const matcher = /"([^"]*)"|([^,]+)/g;
let match: RegExpExecArray | null = null;
while ((match = matcher.exec(line)) !== null) {
const raw = match[1] !== undefined ? match[1] : match[2];
const value = String(raw ?? "").trim();
if (value.length > 0) {
values.push(value);
}
}
const values = parseCsvLine(line);
if (values.length === 0) {
continue;