Опубликован: 09.09.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Российская международная академия туризма
Лекция 4:

Поиск в текстовых файлах

< Лекция 3 || Лекция 4: 12 || Лекция 5 >

Шаг 5. Включаем переменные для хранения результатов вычислений в public class Form2 : System.Windows.Forms.Form

string s_new; // переменная для хранения данных нового сотрудника
int i_row=0; // число строк в выборке
int i_sum=0; // сумма выборки

Шаг 6. Загружаем данные из файла (по умолчанию)

public Form2() {
InitializeComponent();
// Тестируем наличие файла с данными и создаем файл для записи значений
FileStream fin;
Try {
fin=new FileStream("Сотрудники.txt",FileMode.Open);
	}
catch(IOException exc)	{
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;
}
// Считываем значения из файла
string s;
StreamReader fstr_in=new StreamReader(fin);
while((s=fstr_in.ReadLine())!=null)	{
listBox1.Items.Add(s); // заполняем верхний листбокс
	   }
fstr_in.Close(); // закрываем файловый поток
}

Шаг 7. Создаем функцию вычисления средней в выборке

void AppListBox2() {
// вычисляем длину выбранной строки из листбокса
int i_len=s_new.Length;		
string s_pay=s_new.Substring(25,i_len-25);
i_row=i_row+1; // считаем количество строк 
// преобразуем текст в сумму и считаем сумму выборки
i_sum=int.Parse(s_pay)+i_sum;
float f_sum=i_sum/i_row; // считаем среднюю
textBox2.Text=f_sum.ToString(); // выводим среднюю в текстовое поле   
}

Шаг 8. Создаем процедуру выборки значения из верхнего листбокса в нижний по щелчку

private void listBox1_SelectedIndexChanged
  (object sender, System.EventArgs e)
{
s_new=listBox1.SelectedItem.ToString();
listBox2.Items.Add(s_new); // добавляем запись в листбокс2
AppListBox2(); // вызваем функцию вычисления средней в выборке
}

Шаг 9. Создаем процедуру удаления записей из выборки и пересчета средней по оставшимся в выборке записям

private void listBox2_SelectedIndexChanged
  (object sender, System.EventArgs e)
{// если в выборке есть еще записи, которые можно удалить
if (listBox2.SelectedItem != null) {
// вычисляем длину выбранной строки из листбокса
int i_len=listBox2.SelectedItem.ToString().Length;		
string s_pay=listBox2.SelectedItem.ToString().Substring(25,i_len-25);
// считаем количество строк 
i_row=i_row-1;
// преобразуем текст в сумму и считаем сумму выборки
i_sum=-int.Parse(s_pay)+i_sum;
// считаем среднюю
float f_sum;
if (i_row = = 0) {f_sum=0;}
else	{f_sum=i_sum/i_row;}
textBox2.Text=f_sum.ToString();
// удаляем строки из listbox2
listBox2.Items.Remove(listBox2.SelectedItem.ToString());
	}
}

Шаг 10. Создаем процедуру поиска при активизации кнопки

private void button1_Click(object sender, System.EventArgs e) {
// вычисляем длину выбранной строки из TEXTбокса
int i_len=textBox1.Text.Length;
int i_row=listBox1.Items.Count+1;
//цикл просмотра списка верхнего листбокса
for(int i=0; i<listBox1.Items.Count;i++) {
// сравниваем значения текстбокса и листбокса
string s_name=listBox1.Items[i].ToString().Substring(0,i_len);
if (textBox1.Text==s_name)	{i_row=i;}
	}
if (i_row<=listBox1.Items.Count) {
s_new=listBox1.Items[i_row].ToString();
listBox2.Items.Add(s_new);
AppListBox2();
	}
else	{MessageBox.Show(textBox1.Text,"Не найдено");}
}

Шаг 11. Расширяем состав библиотек формы 3

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
// добавляем библиотеку работы с файлами
using System.IO;

Шаг 12. Включаем константы размеров полей базы данных в public class Form3 : System.Windows.Forms.Form

const int l_name=18;
const int l_year=6;

Шаг 13. Создаем процедуру добавления записи в файл Сотрудники.txt для кнопки button1

private void button1_Click(object sender, System.EventArgs e) {
// Проверка значений полей
if (textBox1.Text = = "") {
MessageBox.Show("Введите фамилию и инициалы сотрудника!","Ошибка");
return;
	}
// год рождения должен вводиться цифрами
if (!char.IsDigit(textBox2.Text[0])) {
textBox2.Text = "1940";
MessageBox.Show("Введите год рождения в поле 'г.д.'!","Ошибка");
return;
	}
if (!char.IsDigit(textBox3.Text[0])) {
textBox3.Text = "0";
MessageBox.Show("Введите цифру в поле 'Оклад'!","Ошибка");
return;
	}
/* Тестируем наличие файла с данными о сотрудниках и 
  создаем файл для записи значений */
FileStream fin;
try {
fin=new FileStream("Сотрудники.txt",FileMode.OpenOrCreate);
fin.Close();	}
catch(IOException exc)	{
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;}
//форматируем значения
string s_field1=textBox1.Text;
if (s_field1.Length<l_name) {
for (int i=s_field1.Length; i<l_name; i++)
 s_field1=s_field1+" ";
	}
string s_field2="|"+textBox2.Text; //  пользовательский разделитель данных!
if (s_field2.Length<l_year) {
for (int i=s_field2.Length; i<l_year; i++)
 s_field2=s_field2+" ";
	}
string s_field3="|"+textBox3.Text; //  пользовательский разделитель данных!
StreamWriter fin_out; // открываем файл для записи
try {fin_out=new StreamWriter("Сотрудники.txt", true);}
catch(IOException exc)	{
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;}
string s=s_field1+s_field2+s_field3+"\r\n";
fin_out.Write(s);
fin_out.Close();
MessageBox.Show(s_field1+"\n"+s_field2+" г.р.\n"+s_field3+
" у.е.- оклад.","Запись добавлена");
// Обнуляем поля
textBox1.Text="";
textBox2.Text="1940";
textBox3.Text="0";
}
< Лекция 3 || Лекция 4: 12 || Лекция 5 >
jo jojo
jo jojo
Нидерланды
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург