Как Вы анализируете имя файла в ударе?

Если вы после решения, основанного на обещании, это код @ Dmitri, адаптированный для этого:

function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}

var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file).then(
  data => console.log(data)
);
26
задан dreftymac 9 June 2018 в 19:29
поделиться

6 ответов

Можно использовать команда сокращения для достигания каждого из этих 3 'полей', например:

$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source

"-d" определяет, что разделитель, "-f" определяет количество поля, которого Вы требуете

30
ответ дан Bobby Jack 28 November 2019 в 06:55
поделиться

Хорошее и изящное (в моем уме :-) с помощью только созданный-ins должен поместить его в массив

var='system-source-yyyymmdd.dat'
parts=(${var//-/ })

Затем можно найти части в массиве...

echo ${parts[0]}  ==> system
echo ${parts[1]}  ==> source
echo ${parts[2]}  ==> yyyymmdd.dat

Протест: это не будет работать, если имя файла будет содержать "странные" символы, такие как пространство, или, небеса запрещают, кавычки, одинарные левые кавычки...

9
ответ дан Colas Nahaboo 28 November 2019 в 06:55
поделиться

В зависимости от Ваших потребностей awk более гибок, чем сокращение. Первый задира:

# echo "system-source-yyyymmdd.dat" \
    |awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n",
              $1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}'
System: system
Source: source
Year: yyyy
Month: mm
Day: dd

проблема состоит в том, что описание awk как 'более гибкое', конечно, похоже на вызов iPhone расширенный сотовый телефон;-)

8
ответ дан flight 28 November 2019 в 06:55
поделиться

Используйте команду cut.

, например,

echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'

извлечет первый бит.

Измените значение параметра -f, чтобы получить соответствующие детали.

Вот руководство по команде Cut .

7
ответ дан fedorqui 28 November 2019 в 06:55
поделиться

Другой метод заключается в использовании внутренних инструментов синтаксического анализа оболочки, что позволяет избежать затрат на создание дочерних процессов:

oIFS=$IFS
IFS=-
file="system-source-yyyymmdd.dat"
set $file
IFS=$oIFS
echo "Source is $2"
1
ответ дан Shannon Nelson 28 November 2019 в 06:55
поделиться

Самый простой (и лучший способ ИМО) сделать это - просто использовать read:

$ IFS=-. read system source date ext << EOF
> foo-bar-yyyymmdd.dat
> EOF
$ echo $system
foo
$ echo $source $date $ext
bar yyyymmdd dat

Существует множество вариаций на эту тему, многие из которых зависят от оболочки:

bash$ IFS=-. read system source date ext <<< foo-bar-yyyymmdd.dat

echo "$name" | { IFS=-. read system source date ext
   echo In all shells, the variables are set here...; }
echo but only in some shells do they retain their value here
0
ответ дан William Pursell 28 November 2019 в 06:55
поделиться