Utworzenie tablicy z pliku .csv

0

Cześć,
Na wstępie chcę powiedzieć, że nie zajmuję się programowaniem w ogóle, chociaż parę lat temu "liznąłem" podstawy js. Ze względu na fakt, że co kilka dni drukuję sporo rzeczy, postanowiłem ułatwić sobie życie i napisać skrypt do PhotoShopa. W kilka dni udało mi się skleić działający kod, który sprawnie porusza się po warstwach w pliku psd i wrzuca co potrzebne w kolejkę drukowania. Jednak za każdym razem to co potrzebuję wydrukować muszę wpisać do tablicy w pliku z kodem, a chciałbym wyeksportować sobie plik z excela do csv zamiast za każdym razem edytować plik jsx.

Tablica z której korzysta skrypt wygląda tak:

var tablica = ['jabłko','3','gruszka','6','pietruszka','9'];

I analogicznie plik csv, z którego chciałbym drukować wygląda tak:

CO,ILE
jabłko,3
gruszka,6
pietruszka,9

W pliku csv zawsze będą dwie kolumny, ale ilość wierszy będzie różna.

Zdaję sobie sprawę, że jest to banalnie proste do zrobienia, ale od dwóch dni bezskutecznie szukam rozwiązania, dlatego piszę tutaj z nadzieją, że ktoś z forumowiczów zlituję się nad "niedzielnym" programistą ;)

2

Tak na szybko znalazłem coś takiego: https://sebhastian.com/javascript-csv-to-array/. Zaraz idę spać, może jutro coś wykombinuję innego. Dodatkowo przechowywałbym dane w tablicy obiektów (tak, jak to jest w artykule), a nie zwykłej - będzie prościej i czytelniej.

Zostawię Ci jeszcze hasło, pod którym powinieneś szukać rozwiązania, jeśli tamto Ci nie pasuje.
https://www.google.com/search?q=csv+to+js+array&oq=csv+to+js+arr

0

Artykuł z linka widziałem, ale sposób tam przedstawiony działa w przeglądarce, podobnie jak inne artykuły i tutoriale na jakie trafiłem, a ja potrzebuję rozwiązania które działa lokalnie, na zapisanym na dysku pliku csv. Tak czy inaczej dzięki za chęci! 👍

0

Artykuł z linka widziałem, ale sposób tam przedstawiony działa w przeglądarce, podobnie jak inne artykuły i tutoriale na jakie trafiłem, a ja potrzebuję rozwiązania które działa lokalnie, na zapisanym na dysku pliku csv. Tak czy inaczej dzięki za chęci! 👍

No, w tym wypadku przeglądarka robi za silnik interpretacyjny. Wciąż odpala się to lokalnie u ciebie. Jak piszesz w JS to zawsze się to tak odpali, nawet jak użyjesz elektrona (w uproszczeniu). Jak chcesz mieć "desktopowa" apke to użyj innego języka

0

Jeśli photoshop umożliwia korzystanie z node.js to nie ma raczej żadnego problemu

1) https://stackoverflow.com/a/53031629

const fs = require('fs');

const data = fs.readFileSync('Resource.csv')
    .toString() // convert Buffer to string
    .split('\n') // split string to lines
    .map(e => e.trim()) // remove white spaces for each line
    .map(e => e.split(',').map(e => e.trim())); // split each line to array

console.log(data); // array

2) https://stackoverflow.com/a/53031590

ewentualnie skorzystanie z biblioteki

const csv = require('csvtojson');

csv()
  .fromFile('Resource.csv') // csv file path
  .then((jsonObj) => {
    console.log(jsonObj);
  });
0

Udało mi się znaleźć fragment kodu, który przerobiłem pod swój skrypt. Zostawiam link do do oryginału i moją przeróbkę dla potomnych, może komuś się przyda.

https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-to-import-data-either-via-csv-json-or-spreadsheet/td-p/10870647

var plikCSV = File('C:/plik.csv');
var tablica = []

function csv2arr() {
    plikCSV.open('r');
    var content = plikCSV.read();
    plikCSV.close();
    var lines = content.split('\n');
    var csvArr = [];

    for (var i = 1; i < lines.length; i++) {
        var cells = lines[i].split(',');
        
        for (var k = 0; k < cells.length; k++) {
            var item = cells[k].split(',');
             csvArr.push(item);
        }
    }
    return csvArr;
}

var tablica = csv2arr(plikCSV);

1

Taki mały szczegół, ale zakładam, że tę funkcję aktualnie w kodzie wykorzystujesz tylko dla jednego pliku. Jednak w przyszłości w miarę rozwoju być może będziesz potrzebował przekonwertować więcej plików. Musisz oduzależnić swoją funkcję od jednego pliku:

var plikCSV = File('C:/plik.csv');

function csv2arr(csv) {
    csv.open('r');
    var content = csv.read();
    csv.close();
    var lines = content.split('\n');
    var csvArr = [];

    for (var i = 1; i < lines.length; i++) {
        var cells = lines[i].split(',');
        
        for (var k = 0; k < cells.length; k++) {
            var item = cells[k].split(',');
             csvArr.push(item);
        }
    }
    return csvArr;
}

var tablica = csv2arr(plikCSV);

w twoim przykładzie do funkcji był przekazywany parametr, ale nigdzie nie używany. Dodatkowo chyba nie potrzebujesz definiowania pustej tablicy. Oczywiście to takie małe zmiany, ale na pewno przydatne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1