Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
1

Построчное чтение из файла. Разделение каждой строки на ФИО, ID и статус

03.01.2012, 00:01. Просмотров 3012. Ответов 14
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 public void getDATA(int PIN)//получить даннные из базы
                {
                    string DB = File.ReadAllText("C:\\bankomat\\DB.txt");
                    
                    Int32[,] USER=new Int32[5,5];//20 строк 3 столбца
                    for(int i=0;i<DB.Length;i++){
                        for (int j=0; j < DB.Length; j++) {
 
                            string[] P = DB.Split('\n');//разделить строки
                            string[] b = P[i].Split(' ');//разделить пробелами строку
                            USER[i, 3] = Convert.ToInt32(b[4]);
                            nameOfCustomer=USER[i,j];
                            j++;
                       
                        
                        }
                    
                    }
                           
                         
                    
                        MessageBox.Show("Здравствуйте,"+nameOfCustomer+familyname+Otchestvo);
 
                    
 
 
                }
я плохо понимаю как работать с двухмерными массивами(объясните пожалуйста.Нужно чтобы из файла txt считывалась матрица в который указаны Фамилия Имя Отчество номер карты и тип карты допустим премиум, например в файле такая информация:Иванов Иван Иванович 5656456 Premium.На слудующей строке другая информация о другом клиенте.По Пин коду который после отчества стоит должно выводиться приветствие "Здравствуйте Иванов....и т д" подскажите пожалуйста!!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2012, 00:01
Ответы с готовыми решениями:

Построчное чтение из файла до нужной строки
Доброго времени суток. И снова война с текстовым файлом. Суть куска программы: построчное чтение...

Построчное чтение файла в консоли - выводятся две строки подряд
Есть текстовый файл, в нём куча строчек. Читаю файл: foreach (string lr in File.ReadLines(path,...

Построчное чтение файла и разбор каждой 6-ой строки для получения и использования определённых данных
Добрый вечер! Необходимо прочитать текстовый файл в котором каждая 6-я строка начинается с TR01, в...

Построчное чтение из файла до первой пустой строки
Нужно прочитать файл построчно. В файле встречается одна строка пустая строка. Если она...

Построчное чтение файла со случайным выбором строки
Добрый день! Коллеги подскажите как реализовать средствами bat/cmd следующую задачу: есть некий...

14
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
03.01.2012, 05:56 2
Цитата Сообщение от Вячеслав74 Посмотреть сообщение
Int32[,] USER=new Int32[5,5];//20 строк 3 столбца
во первых тут 5 столбцов, 5 строк,
во вторых тут целесообразнее использовать не массивы, но если тебе нужны массивы, код будет таким:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void getDATA(int PIN)
{
  using (StreamReader reader = new StreamReader(@"DB.tx")) // файл лежит в папке Debug
  {
    string[] Text = new string[1];
    Text[0] = reader.ReadToEnd();
    Text = Text[0].Split(new string[] { " " }, StringSplitOtions.RemooveEmptyEntires);
    reader.Close();
    //Делаем цикл по строчкам из файла
    foreach(string Line in Text)
     {
        string[] Data = Line.Split(' ');
        //Иванов  Иван  Иванович  [B]5656456[/B]  Premium
        if(Convert.ToInt32(Data[3]) == PIN)
           MessageBox.Show("Выводишь из Data всё что тебе необходимо!"); 
     }
  }
}
0
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 00:45  [ТС] 3
я не понял как у нас по строкам разбивается тут??первый раз делится пробелом, потом второй раз?по идее первый раз должно делиться переносом строки а потом уже пробелом???
0
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
04.01.2012, 13:32 4
Нет, первый раз не пробел, там "/r/n"
0
04.01.2012, 13:32
Mans7
59 / 59 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
04.01.2012, 14:15 5
Я бы порекомендовал почитать про базы данных + C# (это мега-удобная штука) либо про XML которые тоже очень удобные для осуществления целей вроде Вашей.

Цитата Сообщение от Вячеслав74 Посмотреть сообщение
я плохо понимаю как работать с двухмерными массивами
Всё просто. Двумерный массив - это таблица. Самая обыкновенная прямоугольная (либо квадратная) таблица, которую можно даже на листике бумаги нарисовать. Кстати я так часто делаю когда путаюсь в своих массивах. Благо, я недавно открыл для себя работу с БД и с массивами теперь гораздо реже встречаюсь. Я бы не рекомендовал делать трех- и более-мерные массивы. Трехмерный будет представлять собой уже что-то вроде куба. Ещё есть понятие "невыровненный массив" который тоже по природе двумерный, но немного отличается от стандартного двумерного.
0
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 14:25  [ТС] 6
он вроде рваный называется)да я понимаю что такое массив и что он из себя представляет, труднее когда цикл по нему проходит (по двухмерному особенно)и внутри него осуществляется индексация и прочее....путаюсь...синтаксис то знаю, труднее логику продумать....с трехмерным честно говоря даже не сталкивался...
0
Mans7
59 / 59 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
04.01.2012, 14:34 7
И не надо он суровый. Лично я к индексации привыкал долго, использовал не i,j в циклах, а x,y - так как-то привычнее почему-то, плюс делал кучу MessageBox.Show которые мне выводили - в каких индексах и что находится. Они помогали =).
0
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 14:52  [ТС] 8
ну привык же))у меня мечта читать код как обычную литературу.пока не совсем получается.пока не разберешься с каждой строчкой досконально не поймешь)
0
Mans7
59 / 59 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
04.01.2012, 14:59 9
Я дам Вам рекомендацию которую к сожалению сам не всегда выполняю из-за лени, но важность её подтвердит абсолютно любой грамотный программист - делайте имена методов, классов, переменных понятными, и по возможности комментируйте свои действия в коде. Собственно это у Вас есть
C#
1
//Делаем цикл по строчкам из файла
Потому как после того как Вы сделаете программу до конца, и, скажем через год-два, а может и через пару месяцев, Вы посмотрите на код что бы сделать какие-либо дополнения или изменения, скорее всего Вы без этих мелочей совершенно не поймёте собственный код. А это очень неприятно будет. Лично меня брат вообще научил обзывать переменные и классы таким образом - не
C#
1
2
int num = 0;
string name = "Имя";
а
C#
1
2
int iNum = 0;
string sName = "Имя";
То есть первая маленькая буква обозначает тип объекта, а дальше интуитивно-понятное название. Проще ориентироваться будет. А ещё надо привыкать пользоваться классами.
1
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 15:06  [ТС] 10
ну не знаю)по мне и так понятно какого типа переменная чтобы первой буквой писать i или s еще) но все равно спасибо)
0
KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
04.01.2012, 16:43 11
Написал так, как по моему мнению должно быть:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Xml;
using System.IO;
using System.Text;
using System.Collections.Generic;
 
namespace justForFun
{
    class MainClass
    {
        public static void Main()
        {
            // Создаем фвйловый поток 
            FileStream fileStream = new FileStream( "PersonList.xml", FileMode.Open );
            //Создаем XmlDocument 
            XmlDocument data = new XmlDocument();
            // Заливаем в него содержимое файла "PersonList.xml"
            data.Load(fileStream);
            fileStream.Close(); 
 
            // Создаем список человеков
            List<Person> personList = new List<Person>();
            
            // Заполняем список элементами с тегом Person
            XmlNodeList personInfoList = data.GetElementsByTagName("Person");
 
            // Заполняем список человеков
            foreach (XmlElement personInfo in personInfoList) 
            {
                string lastName = personInfo.GetAttribute( "lastname" );
                string firstName = personInfo.GetAttribute("firstname");
                string patronym = personInfo.GetAttribute("patronym");
                int cardNumber;
                // Сей блок нужен на случай если какойто вундеркинд попытается 
                // присвоить номеру карты значение "Гравицапа"
                try
                {
                    cardNumber = Int32.Parse(personInfo.GetAttribute("cardNumber"));
                }
                catch
                {
                    cardNumber = -1; // Something went wrong
                }
                string cardType = personInfo.GetAttribute("cardType");
                // Добавляем человека в список
                personList.Add(new Person(lastName, firstName, patronym, cardNumber, cardType));
            }
 
            // Выводим список человеков
            foreach (Person person in personList)
            {
                Console.WriteLine(person);
            }
 
 
            Console.WriteLine( "Введите номер банковской карты для поиска человека" );
            int somePersonCardNumber;
            while (true)
            {
                try
                {
                    somePersonCardNumber = Int32.Parse(Console.ReadLine());
                    break;
                }
                catch
                {
                    Console.WriteLine("Уберите кота с клавиатуры и попробуйте еще раз");
                }
            }
 
            Console.WriteLine("Найденный человек: " + findPersonByCardNumber(personList, somePersonCardNumber));
            Console.ReadLine();
        }
 
        // Поиск человека по номеру карты
        public static Person findPersonByCardNumber( List<Person> personList,int cardNumber )
        {
            Person foundPerson = null;
            foreach (Person person in personList) 
            {
                if (person.CardNumber == cardNumber)
                {
                    foundPerson = person;
                    break;
                }
            }
            return foundPerson;
        }
    }
 
    public class Person 
    {
        public Person( string lastName, string firstName, string patronym, int cardNumber, string cardType )
        {
            LastName = lastName;
            FirstName = firstName;
            Patronym = patronym;
            CardNumber = cardNumber;
            CardType = cardType;
        }
 
        public string LastName {get; private set;}
        public string FirstName { get; private set; }
        public string Patronym { get; private set; } // Отчество
        public int CardNumber { get; private set; }
        public string CardType { get; private set; } // Вообще лучше завести enum но пусть пока так
 
        public override string ToString()
        {
            string personInfo = LastName
                + " " + FirstName
                + " " + Patronym
                + " номер карты " + CardNumber
                + " тип карты " + CardType;
            return personInfo;
        } 
    }
}
Написал ибо
1) Хранение таких данных в текстовом файле, слишком уж легко и непринужденно, позволяет выстрелить себе в ногу ( больно так выстрелить ).
2) Хранение данных, после их считывания в двухмерном массиве - это идиотизм, достойный лучшего применения.
3) Just for fun.

Важно! Для запуска программы необходимо, чтобы рядом с exe - файлом лежал PersonList.xml следующего вида:

XML
1
2
3
4
5
6
<?xml version="1.0" encoding="Windows-1251"?>
<PersonList>
    <Person firstname = "Karm" patronym = "A" lastname = "Maker" cardNumber = "404" cardType = "premium" />
    <Person firstname = "Василий" patronym = "Семенович" lastname = "Пупкин" cardNumber = "253627" cardType = "gold" />
    <Person firstname = "Михаил" patronym = "Валерьевич" lastname = "Селедкин" cardNumber = "8945235" cardType = "platinum" />
</PersonList>
1
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 17:04  [ТС] 12
ого)с этим разобраться надо)пока мало что понятно)
0
KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
04.01.2012, 17:12 13
По сути то же самое, только считывание происходит из xml, вместо двухмерного массива ( применение которого здесь является антипаттерном ), данные складываются в список людей. На этом какбы все.

P.S. Если что-то в коде непонятно, - пиши.

P.P.S. Конструктивная критика приветствуется.
0
Вячеслав74
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
04.01.2012, 17:24  [ТС] 14
мне пока рано критиковать)но код тут вроде бы понятный, только я многие вещи забываю, и с классами вообще пока мало писал....поэтому вроде читал про то что такое get и set аксессоры и override, быстро забыл к сожалению...если можешь черкани побробнее про это.и почему конкретно здесь это используется.буду благодарен.
0
KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
04.01.2012, 18:05 15
override означает что я переопределил метод базового класса. В данном случае я переопределяю метод ToString класса Object от которого неявно наследуются класс Person, с тем чтобы вместо информации, которую выдает Object.ToString() при выводе на консоль объекта класса Person печатались бы значения полей person.

По поводу аксессоров: в приведенном коде можно было написать просто:

C#
1
2
public string LastName
public string FirstName
и приложение преспокойно бы скомпилировалось, и даже работало. Однако возникла бы возможность изменять параметры экземпляра Person после его создания, что едва ли желательно. Поэтому я запретил установку значений для полей откуда либо, кроме объекта их содержащего. Против чтения параметров я ничего не имею поэтому для get оставил значение приватности по умолчанию ( в данном случае public ).

C#
1
public string FirstName{ get; private set; }
Вообще аксессоры еще применяют для проверки входных значений:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        int _NoMoreThenTen = 6;
 
        public int NoMoreThenTen
        {
            get
            {
                return _NoMoreThenTen;
            }
            set 
            {
                if (value <= 10)
                {
                    _NoMoreThenTen = value;
                }
            }
        }
Для проверки полномочий на чтение / запись данных и так далее...

Подробнее смотри MSDN и Википедию.
0
04.01.2012, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2012, 18:05

Построчное разделение текстового файла
Здравствуйте, помогите разделить текстовый файл (более 20 гб) на части по 2-3 гб, без разрыва...

Чтение каждой 9-й строки файла txt
Доброго времени суток! Как организовать чтение каждой 9-й строки текстового файла? Заранее...

Построчное чтение из файла
Всем привет! Помогите написать функцию построчного вывода из файла. Условно, есть файл с таким...


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

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

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