Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Обработка массива. Нужна помощь.  (Прочитано 885 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kvic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Обработка массива. Нужна помощь.
« : 10 Октября 2014, 22:17:54 »
Коллеги!

У меня проблема не могу разрулить обработку данных.
Есть текстовый файл структурированный.
Файл могу распарсить и превести к массиву данных:

№;К1 ;К2
1;А  ;Б
0;   ;В
2;Г  ;Д
3;Е  ;Ё
0;   ;Ж

Нужно обработать массив и на выходе получить следующее:
№;К1 ;К2
1;А  ;БВ
2;Г  ;Д
3;Е  ;ЁЖ

Второй день бьюсь. Помогите!!!

Да, вся эта ересь обрабатывается на VBA.

Заранее спасибо.
миру мир

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net

Оффлайн kvic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #2 : 10 Октября 2014, 22:31:26 »
Спасибо, но я это реализую на VBA (Visual basic for application) нет таких средств. Если можно, то помогите решить стандартными средствами: циклы, условия и т.д.
Заранее спасибо.
миру мир

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Обработка массива. Нужна помощь.
« Ответ #3 : 10 Октября 2014, 22:46:43 »
Тогда вы неудачно выбрали форум.
VBA — не Linuxовый метод решения задач.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Извините, я все еще учусь

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #5 : 10 Октября 2014, 23:10:23 »
Код: (bash) [Выделить]
while read line
do
  if [ ${line%%;*} == 0 ]
  then
    s=$s${line##*;}
  else
    if [ "$s" ]
    then
      echo $s
    fi
    s=$line
  fi
done
echo $s
« Последнее редактирование: 10 Октября 2014, 23:34:53 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн kvic

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #6 : 10 Октября 2014, 23:13:42 »
Тогда вы неудачно выбрали форум.
VBA — не Linuxовый метод решения задач.

Согласен, с тем что это Linuxовый форум. Но ветка о программировании. И какая разница на чём это реализовывать (bash, python, c/c++, forth, pascal etc.)

И ещё, там где я это реализовываю у меня из средств разработки только VBA.
Так что если следовать Вашему совету -- ждать пришедствия Linuxа, то решение задачи, в моих условиях  можно так же ждать -- всю оставшуюся жизнь. :-)
« Последнее редактирование: 11 Октября 2014, 00:23:34 от kvic »
миру мир

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #7 : 11 Октября 2014, 13:56:19 »
kvic, сформируй правило словами, а  то пример не совсем понятен.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #8 : 11 Октября 2014, 14:06:07 »
какая разница на чём это реализовывать (bash, python, c/c++, forth, pascal etc.)
Так и возьмите bash-евую реализацию и адаптируйте под свой VBA. Там никаких сверх-функций не использовано, только стандартные циклы, условия, присвоение/вывод значения переменной, обрезка строк.
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: Обработка массива. Нужна помощь.
« Ответ #9 : 11 Октября 2014, 15:29:32 »
Цитировать
И какая разница на чём это реализовывать (bash, python, c/c++, forth, pascal etc.)

Ну вот вам на питоне решение тогда

Код: (python) [Выделить]
import codecs

with codecs.open('data', 'r', 'utf-8') as f:
        res = []
# skip first line
fl = f.readline().rstrip("\n")
for line in f.readlines():
line = line.rstrip("\n")
if len(line) > 0:
if line[0] == '0':
if not res:
raise Exception('Zero is in first line. They gave me an incomplete conditions!')
parts = line.split(';')
if len(parts) > 1:
parts = map(lambda x: x.strip(), parts[1:])
res[-1] = res[-1] + ''.join(parts)
else:
res.append(line)

res.insert(0, fl)
print "\n".join(res)

И задание неполное
Что делать если первая строка нулевая? Могут ли остальные числа начинаться с нуля (06, 07 и т.д.)?

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.