Как проверить, имеет ли строка правильный синтаксис, как это? - PullRequest
1 голос
/ 01 декабря 2010

если у меня следующий синтаксис строки

FirstName, FamilyName, Address, PhoneNo

и я читаю файл данных, содержащий информацию, как я могу проверить, что я читаю строку с правильным синтаксисом ??

ОБНОВЛЕНИЕ ::

Я имею в виду функцию, которую я посылаю ей каждую строку (из цикла while), и возвращает 0, если строка верна, и 1, если строка нет?

ОБНОВЛЕНИЕ2 ::

правильная форма:

first name(string), last name(string), address(string),  phone no.(string)

, поэтому, если в строке отсутствует один или более 4,, он должен вернуть 1 ,,

Используя Bash,

Хороший ввод: *

Rami, Jarrar, Jenin - Wadi berqen, 111 111

# Некоторые случаи, чтобы справиться с

, Jarrar, Jenin - Wadi berqen, 111 111

- Extra Spaces::
Rami,    Jarrar, Jenin - Wadi berqen, 111 111

Rami, Jarrar, Jenin - Wadi berqen, 111 111, 213 3123

ТАКЖЕ ДРУГОЕ ОБНОВЛЕНИЕ:)

check(){
x=$(echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$')
return $x
}

len=#number of lines in the file
i=1
while [ $i -le $len ]; do
line=$(cat $file)

#------this is where i call the func-----
check $line
if [ $? -eq 1 ];then
echo "ERROR"
else
echo "Good Line"
fi

BASH 2.3.39 * GREP 2.5.3 *

ОБНОВЛЕНИЕ теперь, если я сделаю правильный формат, подобный этому: *

string, value, value, value

значение: является положительным целым числом

чем эту строку следует заменить ::

x=$(echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$')

??

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Позволяет пустые поля:

check () { echo "$@" | grep -q '^[^,]*,[^,]*,[^,]*,[^,]*$'; }

Запрещает заполнять любое поле:

check () { echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$'; }

Оболочка Bourne без использования внешних утилит (допускает пустые поля):

check () { local IFS=,; set -- $@; return $(test -n "$4" -a -z "$5"); }

Bash 3.2 или выше (допускает пустые поля):

check () { [[ $@ =~ ^[^,]*,[^,]*,[^,]*,[^,]*$ ]]; }

Bash 3.2 или выше (не допускает пустых полей):

check () { [[ $@ =~ ^[^,]+,[^,]+,[^,]+,[^,]+$ ]]; }
0 голосов
/ 01 декабря 2010
is_correct () {
    grep -q '^[^ ][^,]\+, [^ ][^,]\+, [^ ][^,]\+, [^ ][^,]\+$' <<< "$@"
}
l=0
while read line ; do
    is_correct "$line" && echo line $l ok || echo Invalid syntax on line $l
    ((l+=1))
done <<<"Rami, Jarrar, Jenin - Wadi berqen, 111 111
, Jarrar, Jenin - Wadi berqen, 111 111
- Extra Spaces::
Rami,    Jarrar, Jenin - Wadi berqen, 111 111
Rami, Jarrar, Jenin - Wadi berqen, 111 111, 213 3123
A line, containg fields with, many spaces, but otherwise valid
a, b, c, d
aa, bb, cc, dd"

Урожайность:

line 0 ok
Invalid syntax on line 1
Invalid syntax on line 2
Invalid syntax on line 3
Invalid syntax on line 4
line 5 ok
Invalid syntax on line 6
line 7 ok

Правильно выбрасывает все строки, кроме выборочной, включая случай "слишком много пробелов". Единственное место, где оно терпит неудачу, это если в поле есть только один символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...