Thanks. I sent it over although I wasn’t sure how to point you towards the file that is not getting the information. I’m using the script I noted above:
//1. HELPER: Safely convert SongKong’s multi-value index to a JS Array
function getJSArray(fieldName) {
var jsArray = [];
try {
var multi = eval(fieldName + “_index”);
if (multi && multi.length > 0) {
for (var i = 0; i < multi.length; i++) {
jsArray.push(multi[i]);
}
}
} catch (e) {}
return jsArray;
}
// 2. HELPER: Alphabetize by Last Name and Join with literal \
function formatAndSort(fieldName) {
var multiValue = getJSArray(fieldName);
if (multiValue.length === 0) return ‘’;
if (multiValue.length === 1) return multiValue[0];
multiValue.sort(function(a, b) {
var nameA = a.trim().split(' ');
var nameB = b.trim().split(' ');
var lastA = nameA[nameA.length - 1].toLowerCase();
var lastB = nameB[nameB.length - 1].toLowerCase();
return lastA.localeCompare(lastB);
});
// Use four slashes to result in two literal slashes
return multiValue.join('\\\\');
}
// 3. HELPER: Create the “Role\Person” repeated format
function makeRepeatedRole(roleLabel, fieldName) {
var arr = getJSArray(fieldName);
if (arr.length === 0) return ‘’;
arr.sort(function(a, b) {
var nameA = a.trim().split(' ');
var nameB = b.trim().split(' ');
return nameA[nameA.length - 1].toLowerCase().localeCompare(nameB[nameB.length - 1].toLowerCase());
});
var parts = [];
for (var i = 0; i < arr.length; i++) {
// Double backslash between Role and Person
parts.push(roleLabel + '\\\\' + arr[i]);
}
// Double backslash between entries
return parts.join('\\\\');
}
// — STEP 1: Process Fields —
executiveproducer = formatAndSort(‘executiveproducer’);
producer = formatAndSort(‘producer’);
coproducer = formatAndSort(‘coproducer’);
composer = formatAndSort(‘composer’);
arranger = formatAndSort(‘arranger’);
songwriter = formatAndSort(‘songwriter’);
lyricist = formatAndSort(‘lyricist’);
engineer = formatAndSort(‘engineer’);
mixer = formatAndSort(‘mixer’);
masterer = formatAndSort(‘masterer’);
conductor = formatAndSort(‘conductor’);
artdirection = formatAndSort(‘artdirection’);
design = formatAndSort(‘design’);
photography = formatAndSort(‘photography’);
coverpainting = formatAndSort(‘coverpainting’);
anr = formatAndSort(‘anr’);
booking = formatAndSort(‘booking’);
management = formatAndSort(‘management’);
marketing = formatAndSort(‘marketing’);
legal = formatAndSort(‘legal’);
// — STEP 2: Build Involved People Hierarchy —
var hierarchy = [
[‘Executive Producer’, ‘executiveproducer’], [‘Producer’, ‘producer’],
[‘Co-Producer’, ‘coproducer’], [‘Composer’, ‘composer’],
[‘Arranger’, ‘arranger’], [‘Songwriter’, ‘songwriter’],
[‘Lyricist’, ‘lyricist’], [‘Recording Engineer’, ‘engineer’],
[‘Mixing Engineer’, ‘mixer’], [‘Mastering Engineer’, ‘masterer’],
[‘Conductor’, ‘conductor’], [‘Art Direction’, ‘artdirection’],
[‘Design’, ‘design’], [‘Photography’, ‘photography’],
[‘Album Cover Painting’, ‘coverpainting’], [‘A&R’, ‘anr’],
[‘Booking’, ‘booking’], [‘Management’, ‘management’],
[‘Marketing’, ‘marketing’], [‘Legal’, ‘legal’]
];
var finalFull = ‘’;
for (var j = 0; j < hierarchy.length; j++) {
var entry = makeRepeatedRole(hierarchy[j][0], hierarchy[j][1]);
if (entry !== ‘’) {
if (finalFull !== ‘’) finalFull += ‘\\’;
finalFull += entry;
}
}
involvedpeople = finalFull;
comment = finalFull;
Here is a screenshot after running fix my files and then the script. After running it script it doesn’t include many fields such as the engineers, producers, etc.