bash считывает значение хранилища CSV-файла в переменную

Объекты в списке должны иметь toString, чтобы они могли напечатать что-то значимое для экрана.

Вот быстрый тест, чтобы увидеть различия:

public class Test {

    public class T1 {
        public Integer x;
    }

    public class T2 {
        public Integer x;

        @Override
        public String toString() {
            return x.toString();
        }
    }

    public void run() {
        T1 t1 = new T1();
        t1.x = 5;
        System.out.println(t1);

        T2 t2 = new T2();
        t2.x = 5;
        System.out.println(t2);

    }

    public static void main(String[] args) {        
        new Test().run();
    }
}

И когда это выполняется, результаты, напечатанные на экране, следующие:

t1 = Test$T1@19821f
t2 = 5

Поскольку T1 не переопределяет метод toString, его экземпляр t1 выводится как нечто, что не очень полезно. С другой стороны, T2 переопределяет toString, поэтому мы контролируем, что он печатает, когда он используется в I / O, и мы видим что-то немного лучше на экране.

0
задан Learing Always 17 March 2019 в 23:07
поделиться

1 ответ

IFS=, полезна, только если вы используете read -a для чтения в массив, или вы передаете одно имя переменной на столбец, который хотите прочитать. Ниже мы делаем первое:

#!/usr/bin/env bash
#              ^^^^ -- NOT /bin/sh

row_idx=0
while IFS=, read -ra values; do
  for col_idx in "${!values[@]}"; do value=${values[$col_idx]}
    if [ "$value" = something ]; then
      echo "something found on row $row_idx, column $col_idx"
    fi
  done
  (( ++row_idx ))
done

См. Это работает на https://ideone.com/JN1pK3 , с выводом (после вставки something во вторую строку input, рядом с концом): something found on row 1, column 4 (учитывая, что строки и столбцы индексируются нулем).

0
ответ дан Charles Duffy 17 March 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: