(Мой первый пост, прошу прощения за ошибки)
Я работаю с небольшим набором данных в файлах CSV, которые мне нужно прочитать, обработать и затем экспортировать в виде текстового файла.
Формат данных CSV:
REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,Brisbane,1
CCA4112,StatusON,5:44,Syndey,0
CCA4118,StatusON,6:11,Melbourne,1
Я хочу иметь возможность брать каждую строку после строки заголовка и проверять
a) если значение LOADED равно 0 или 1 (переход к следующей строке, если 1).
б) Если «LOADED» равно 0, то проверьте, соответствует ли значение «REGO» заранее определенному списку значений «REGO».
c) Если совпадение, измените время «SHIFT».
г) Если совпадений нет, переходите к следующей строке.
После этого я хочу экспортировать все строки только со значениями «REGO» и «SHIFT», чтобы они выглядели так:
CCA4110,5:43
CCA4112,5:33
...
Поскольку мне это кажется немного сложным, мне сложно представить, как лучше всего подойти к этой проблеме. Мне было интересно, может ли кто-нибудь помочь мне подумать об этом так, чтобы не просто собрать вместе дюжину вложенных циклов for.
Спасибо большое,
Лиам
Обновлено: вопрос о проверке нескольких условий:
Скажем, у меня есть два файла CSV:
List_to_Change.csv
REGO,STATUS,SHIFT,LOCATION,LOADED
CCA2420,StatusOn,11:24,BRISBANE,1
CCA2744,StatusOn,4:00,SYDNEY,1
CCA2009,StatusOn,4:00,MELBOURNE,0
List_to_Compare.csv
REGO,CORRECT_SHIFT
CCA2420,6:00
CCA2660,6:00
CCA2009,5:30
Алгоритм:
1. Проверить значение в столбце 'List_to_Check.csv' 'LOADED'
A. Если значение равно «0», перейдите к шагу 2.
B. Если значение равно «1», пропустите эту строку и перейдите к следующей.
2. Проверить, отображается ли значение REGO в List_to_Check.csv в List_to_Compare.csv
A. Если true, переходите к шагу 3.
B. Если false, пропустите эту строку и перейдите к следующей.
3. Измените значение 'SHIFT' в 'List_to_Change.csv' на значение, показанное в 'List_to_Compare.csv'
4. Строка для каждой строки, которая была изменена, и экспорт в текстовый файл.
@briosheje Большое спасибо за ресурс, сейчас проверю. У меня было несколько попыток, разделение ввода на основе возврата каретки, а также попытки (и безуспешные) понять, как использовать Papa Parse для обработки файла. Думаю, меня больше интересует, есть ли более разумный способ взглянуть на проблему. Еще раз спасибо
Пожалуйста, поделитесь выше попыткой (то есть кодом), о которой вы говорите, это было бы хорошей отправной точкой и удовольствием помочь вам, начиная с ввода ваш;)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я бы посоветовал разделить рабочий процесс на три этапа:
// This creates an object based on an order of columns:
const Entry = ([rego, status, shift, location, loaded]) =>
({ rego, status, shift, location, loaded });
// Which entries are we interested in?
const shouldHandleEntry = ({ loaded }) => loaded === "1";
// How do we update those entries?
const updateEntry = entry => ({
...entry,
shift: ["CCA4118"].includes(entry.rego)
? "5:33"
: entry.shift
});
// What do we export?
const exportEntry = ({ rego, shift }) => `${rego},${shift}`;
// Chain the steps to create a new table:
console.info(
csvBody(getCSV())
.map(Entry)
.filter(shouldHandleEntry)
.map(updateEntry)
.map(exportEntry)
.join("\n")
)
// (This needs work if you're using it for production code)
function csvBody(csvString) {
return csvString
.split("\n")
.map(line => line.trim().split(","))
.slice(1);
};
function getCSV() { return `REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,Brisbane,1
CCA4112,StatusON,5:44,Sydney,0
CCA4118,StatusON,6:11,Melbourne,1`; }Это невероятно и невероятно близко к тому, что я пытался донести. Большое спасибо за то, что уделили этому время. Я уже многому могу научиться, читая то, что вы написали. Это имеет смысл, если я хочу проверить одно условие, например "Location = 1." Скажем, я хотел проверить несколько условий, как лучше всего подойти к этому? Я отредактировал основной пост с примером для ясности. Не могли бы вы взглянуть?
Это требует замены шага updateEntry. Вместо статической функции нам нужно создать функцию обновления, основанную на изменениях в другом файле. Указатель: создайте объект REGO: CORRECT_SHIFT, для каждой записи, которую необходимо проверить, проверьте, есть ли исправленное значение в этом объекте, и обновите его соответствующим образом.
Это может помочь вам получить подсказку: stackoverflow.com/questions/7431268/…. В любом случае, речь идет просто о разделении строки, вы что-нибудь пробовали или ищете теоретический подход?