Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
1

Выравнивание текста по правому краю терминала

06.01.2011, 19:08. Просмотров 2484. Ответов 9
Метки нет (Все метки)

Здравтсвуйте, я только начинаю работать с Unix/Linux системами, поэтому пока плохо умею писать программы. Помогите пожалуйста написать очень простенькую программу выравнивания текста по правому краю терминала. Зарание благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2011, 19:08
Ответы с готовыми решениями:

Выравнивание текста по правому краю
Помогите подправить код, чтобы ровнял текст по правому краю public partial...

Выравнивание текста по правому краю
Помогите, пожалуйста, написать код. Текст, состоящий из ряда строк,...

Выравнивание по правому краю введенного текста
Может кто подсказать, правильно ли сделал? Произвести выравнивание по...

Выравнивание текста в Label по правому краю
Подскажите как сделать чтобы label когда в нем текст он уходил влево а не...

Выравнивание по правому краю текста в PictureBox
G_arifm->DrawString(String::Format("{0}",rezult), gcnew Drawing::Font("Arial",...

9
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
07.01.2011, 06:25 2
Код
[guest@localhost tmp]$ f() { for i in $(seq $1); do echo -n ' '; done; }
[guest@localhost tmp]$ f 7
       [guest@localhost tmp]$ f 25
                         [guest@localhost tmp]$ 
[guest@localhost tmp]$ cat file
abcd
defg
hijh
[guest@localhost tmp]$ sed "s/^/$(f 70)/" file
                                                                      abcd
                                                                      defg
                                                                      hijh
[guest@localhost tmp]$
это не выравнивание, а просто отступ
выравнивание требует учёта длины каждой строки

а здесь уже выравнивание
Код
[guest@localhost tmp]$ cat >file
ab
cdef 
ghijhkl
abc
[guest@localhost tmp]$ for L in $(cat file); do f $((70 - ${#L})); echo $L; done
                                                                    ab
                                                                  cdef
                                                               ghijhkl
                                                                   abc
[guest@localhost tmp]$
пробелы учесть
Код
[guest@localhost tmp]$ cat >file
a b c
def
ddddddddd
d
[guest@localhost tmp]$ IFS=$'\n'; for L in $(cat file); do f $((70 - ${#L})); echo $L; done                                               
                                                                 a b c                                                                      
                                                                   def                                                                      
                                                             ddddddddd                                                                      
                                                                     d                                                                      
[guest@localhost tmp]$
1
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
07.01.2011, 13:28  [ТС] 3
спасибо

Добавлено через 1 час 51 минуту
скажите пожалуйста что мне делать? при вводе текста программы после done пишет f command not found
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
07.01.2011, 14:14 4
в первом коде вторая строчка
0
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
10.01.2011, 23:21  [ТС] 5
скажите пожалуйста, что такое IFS?

Добавлено через 3 минуты
и что значит seq $1?
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
11.01.2011, 02:11 6
man bash
IFS The Internal Field Separator that is used for word splitting after
expansion and to split lines into words with the read builtin com‐
mand. The default value is ``<space><tab><newline>''.
задействование IFS оставляет только один разделитель вместо трёх

обычный IFS
Код
[guest@localhost ~]$ echo -n "$IFS" | cat -et
 ^I$
[guest@localhost ~]$ echo -en " \t\n" | cat -et
 ^I$
[guest@localhost ~]$ echo ${#IFS}
3
[guest@localhost ~]$
замена IFS
Код
[guest@localhost tmp]$ cat >file
a b c
def
ddddddddd
d
[guest@localhost tmp]$ ( IFS=$'\n'; for l in $(cat file); do echo 1 $l; done )
1 a b c
1 def
1 ddddddddd
1 d
[guest@localhost tmp]$ echo ${#IFS}
3
[guest@localhost tmp]$
круглые скобки делаются, чтобы IFS после них остался прежним

и что значит seq $1?
seq - это программа (man seq)
от слова sequence

когда находимся внутри функции bash, её аргументы обозначены, как в обычном скрипте, через $1, $2, $3 и так далее
то есть seq там использует первый аргумент, переданный в функцию

пример
Код
[guest@localhost tmp]$ f() { seq $1 $2; }
[guest@localhost tmp]$ f 10 20
10
11
12
13
14
15
16
17
18
19
20
[guest@localhost tmp]$ f() { seq $1 $2 $3; }
[guest@localhost tmp]$ f 10 15
10
11
12
13
14
15
[guest@localhost tmp]$ f 10 2 15
10
12
14
[guest@localhost tmp]$
1
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
11.01.2011, 09:58  [ТС] 7
большое спасибо, все понятно
0
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
13.01.2011, 21:19  [ТС] 8
скажите пожалуйста еще что такое ${#L}
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
14.01.2011, 02:53 9
man bash
${#parameter}
Parameter length. The length in characters of the value of parameter
is substituted. If parameter is * or @, the value substituted is the
number of positional parameters. If parameter is an array name sub‐
scripted by * or @, the value substituted is the number of elements
in the array.
кстати, когда набираешь man bash, там можешь нажать h и появится help, в котором можно узнать, как вести поиск по содержимому
например /param.*\}$ выдаст это дело
1
nba-player
0 / 0 / 0
Регистрация: 12.09.2010
Сообщений: 16
14.01.2011, 08:40  [ТС] 10
спасибо)
0
14.01.2011, 08:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 08:40

Произвести выравнивание по правому краю введенного текста
помогите пожалуйста!!!! срочно надо!! задача №1. Произвести выравнивание...

Мне нужно сделать программу -выравнивание текста по ширине,левому,правому краю,центру
Мне нужно сделать программу -выравнивание текста по ширине,левому,правому...

Выравнивание по правому краю
Вообщем есть форма поиска на сайте, мне нужно, чтобы она была справа, но ничего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru