Я использовал этот FileReader для чтения csvs:
readDocument(fileChangeEvent: Event) {
return new Observable<any>(obs => {
const file = (fileChangeEvent.target as HTMLInputElement).files[0];
if (file) {
const fileReader = new FileReader();
fileReader.onload = e => {
obs.next({
name: file.name,
result: fileReader.result
});
};
fileReader.readAsText(file);
}
});
С этим я мог затем использовать файл в моей подписке и использовать его имя или значение в любое время:
this.readDocument(csv).subscribe(value => {
console.log(value.name);
console.log(value.result
}
Тем временемУ меня есть этот Filereader для чтения папки, в которой хранятся csvs:
public readFolder(files: string[]) {
this.fileCache = [];
this.readFile(0, files);
return this.folderReader$.asObservable();
}
private readFile(index, files) {
const reader = new FileReader();
if (index >= files.length) {
this.folderReader$.next(this.fileCache);
return;
}
const file = files[index];
const filename = file.name;
console.log(filename);
reader.onload = (e: any) => {
this.fileCache.push(e.target.result);
this.readFile(index + 1, files);
};
reader.readAsBinaryString(file);
}
Теперь, с этим я получаю массив, который заполнен данными каждого CSV в папке.Затем я могу позже использовать, например, цикл для отображения всех данных файла.
files = []
this.folderReader.readFolder(csv.target.files).subscribe(files => {
files.forEach((value, key) => {
console.log(key + ': ' + value);
}
}
Моя проблема в том, что id хотел бы снова иметь возможность прочитать значение и имя файла, как впервый пример.В итоге это должно выглядеть примерно так:
this.folderReader.readFolder(csv.target.files).subscribe(files => {
files.forEach((file) => {
console.log(file.name)
console.log(file.result)
}
}
Я изо всех сил пытаюсь изменить второй FileReader, чтобы он выглядел так же, как и первый, только в массиве.Что я могу сделать, чтобы улучшить мой FileReader, чтобы он выдавал желаемый результат?Может быть, есть еще более простой способ?