Вывод строки из файла

Ответить
Аватара пользователя

Автор темы
ValentO
Сообщения: 3
Зарегистрирован: 04 дек 2015, 15:01

Вывод строки из файла

#1

Сообщение ValentO » 04 дек 2015, 15:48

Здравствуйте форумчане.Я новичок,что в программировании,что в Linux-е. Задача такова,нужно вывести ФИО и его группу(в уже ранее созданном файле,структуру приведу ниже). То есть,должен использоваться ввод с клавиатуры,затем сравнение,если это ФИО в файле(если есть,то вывод ФИО и его группы), иначе такого ФИО не существует. Заранее спасибо. Если же кто поможет,то хоть немного прокомментируйте код.

Собственно сам список:
группа 1
Агапов Борис Николаевич
Агнивцев Николай Яковлевич
Бальмонт Константин Дмитриевич
Гофман Модест Людвигович
группа 2
Есенин Сергей Александрович
Маяковский Владимир Владимирович
Позняков Николай Сергеевич
группа 3
Цветаева Марина Ивановна
Иванов Георгий Владимирович
Бунин Иван Алексеевич


P.S Прошу прощение,если не ясно написал задание.Я тут что-то сделал,но это не внушает доверия.

Код: Выделить всё

#!/bin/bash

s1='vvod'
s2='string'
echo -n "Enter the data writer"

if [$s1=$s2];
  then
       echo" Tour search no results"
   fi
      if [$s1=$s1];
        then
            echo "Your results"
            fi
read vvod

echo "You entered: $s1"

grep -r $vvod spisok;

chmod a+x script.sh

Аватара пользователя

newerty
Сообщения: 282
Зарегистрирован: 11 окт 2015, 20:52

Re: Вывод строки из файла

#2

Сообщение newerty » 04 дек 2015, 16:10

Задача такова,нужно вывести ФИО и его группу
Объясните, нужно, чтобы по каким-либо введенным параметрам нашлась запись, как в базе данных (в нашем случае файл играет ее роль, я правильно понимаю)?
Можно допустим по ID найти ФИО и группу, по группе найти список участников, поясните свою цель, может быть, помогу.
Вы хотите просто по ФИО найти номер/код группы? Довольно нетрудно, в принципе.
Лучше всего написать на PHP+MySQL, было бы очень удобно, хотя можно и так в принципе.

Аватара пользователя

Автор темы
ValentO
Сообщения: 3
Зарегистрирован: 04 дек 2015, 15:01

Re: Вывод строки из файла

#3

Сообщение ValentO » 04 дек 2015, 19:06

newerty писал(а):
Задача такова,нужно вывести ФИО и его группу
Объясните, нужно, чтобы по каким-либо введенным параметрам нашлась запись, как в базе данных (в нашем случае файл играет ее роль, я правильно понимаю)?
Можно допустим по ID найти ФИО и группу, по группе найти список участников, поясните свою цель, может быть, помогу.
Вы хотите просто по ФИО найти номер/код группы? Довольно нетрудно, в принципе.
Лучше всего написать на PHP+MySQL, было бы очень удобно, хотя можно и так в принципе.
Скажу так,предположим я ввожу фамилию (Маяковский) и мне на основе найденных результатов,выводятся все найденные (Маяковский Владимир Владимирович группа 2),вот как-то так.Просто нужно именно на языке shell.

Аватара пользователя

newerty
Сообщения: 282
Зарегистрирован: 11 окт 2015, 20:52

Re: Вывод строки из файла

#4

Сообщение newerty » 04 дек 2015, 19:16

Ну, на shell не знаю как, я на си только могу.

Аватара пользователя

Автор темы
ValentO
Сообщения: 3
Зарегистрирован: 04 дек 2015, 15:01

Re: Вывод строки из файла

#5

Сообщение ValentO » 04 дек 2015, 19:18

newerty писал(а):Ну, на shell не знаю как, я на си только могу.
Если Вам,не сложно,напишите хоть на СИ,может я от Ваших полученных результатов,сам себя на мысль толкну.

Аватара пользователя

serg666
Сообщения: 673
Зарегистрирован: 26 фев 2013, 21:15

Re: Вывод строки из файла

#6

Сообщение serg666 » 04 дек 2015, 22:26

Код: Выделить всё

#!/bin/bash

INPUTFILE=./spisok.txt
GROUPNAME="группа"

WRITER=""
until [ "$WRITER" ]; do 
	read -p "Enter the data writer: " WRITER
done

GROUP=""
AUTHOR=""
cat < $INPUTFILE | while read; do
	if `echo "$REPLY" | grep "$GROUPNAME" > /dev/null`; then
		GROUP="$REPLY";
	elif `echo "$REPLY" | grep "$WRITER" > /dev/null`; then
		echo $GROUP
		echo $REPLY
		AUTHOR=$REPLY
	fi
done
[ "$AUTHOR" ] || echo "Ничего не найдено"
Последний раз редактировалось serg666 05 дек 2015, 10:27, всего редактировалось 1 раз.

Аватара пользователя

newerty
Сообщения: 282
Зарегистрирован: 11 окт 2015, 20:52

Re: Вывод строки из файла

#7

Сообщение newerty » 05 дек 2015, 02:36

Агапов Борис Николаевич:1
Агнивцев Николай Яковлевич:1
Бальмонт Константин Дмитриевич:1
Гофман Модест Людвигович:1
Есенин Сергей Александрович:2
Маяковский Владимир Владимирович:2
Позняков Николай Сергеевич:2
Цветаева Марина Ивановна:3
Иванов Георгий Владимирович:3
Бунин Иван Алексеевич:3

Код: Выделить всё

#include <fstream>
#include <iostream>
#include <cstring>

#define file "base.txt"

using namespace std;

int
strchrn(char *s, int c)
{
	int n = -1;
	while (*s)
	{
		n++;
		if (*s == c) return n;
		s++;
	}
	return -1;
}

int
strchrs(char *s, char *t)
{
	while (*t)
	{
		int r = strchrn(s, *t);
		if (r > -1) return r;
		t++;
	}
	return -1;
}

int
main(void)
{
	char buffer[1024], fio[50], groop[10];
	int count = 0, number;
	cout << "Введите ФИО или группу: ";
	cin.getline(fio, 50);
	ifstream input(file);
	while(input.getline(buffer, 1024))
	{
		if (strstr(buffer, fio))
		{
			count++;
			if (count == 1)
				cout << endl;
			number = strchrs(buffer, ":");
			strcpy(groop, &buffer[number+1]);
			buffer[number] = 0;
			cout << count << ": \t" << buffer << endl;
			cout << "\tГруппа: " << groop << endl;
		}
	}
	if (count == 0)
		cout << "\nНичего не найдено." << endl;
	else
		cout << "\nНайдено " << count << " записей в базе." << endl;
	return 0;
}
g++ base.cpp -o base -s Группа

Код: Выделить всё

Введите ФИО или группу: 2

1: 	Есенин Сергей Александрович
	Группа: 2
2: 	Маяковский Владимир Владимирович
	Группа: 2
3: 	Позняков Николай Сергеевич
	Группа: 2

Найдено 3 записей в базе.
Имя

Код: Выделить всё

Введите ФИО или группу: Николай

1: 	Агнивцев Николай Яковлевич
	Группа: 1
2: 	Позняков Николай Сергеевич
	Группа: 2

Найдено 2 записей в базе.
Единственное - 49 строка что-то сказать пытается, но я не понимаю, что.
p.s. Ошибка устранена немного другим способом, меньше кода, все работает точно так же.

Код: Выделить всё

#include <fstream>
#include <iostream>
#include <cstring>

#define file "base.txt"

using namespace std;

int
main(void)
{
	char buffer[1024], fio[50], groop[10], *sp;
	int count = 0, number, cnt;
	cout << "Введите ФИО или группу: ";
	cin.getline(fio, 50);
	ifstream input(file);
	while(input.getline(buffer, 1024))
	{
		if (strstr(buffer, fio))
		{
			count++;
			if (count == 1)
				cout << endl;
			sp = strtok(buffer, ":");
			cnt = 0;
			while (sp)
			{
				if (cnt == 0)
					cout << count << ": \t" << sp << endl;
				else
					cout << "\tГруппа: " << sp << endl;
				sp = strtok(NULL, ":");
				cnt++;
			}
		}
	}
	if (count == 0)
		cout << "\nНичего не найдено." << endl;
	else
		cout << "\nНайдено " << count << " записей в базе." << endl;
	return 0;
}