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

Сортировка записей в текстовом файле

< Лекция 5 || Лекция 6 || Лекция 7 >
Аннотация: В лекции приведен пример реализации сортировки записей списка по шаблону, добавления и удаления записей из списка. Также рассмотрено преобразование текста в нужный регистр

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

Разработка: Приложение "Сортировка списка" для просмотра и сортировки текстового списка по шаблону.

Состав выполняемых функций:

  • Файловые операции: открыть, сохранить, закрыть
  • Алгоритмы: преобразование вводимого текста в верхний регистр, до-бавление и сохранение записей в файле, удаление записей из загруженного списка, сортировка записей загруженного списка по шаблону
  • Информационно-справочные: нет

Наращивание функциональности не предусматривается.

Защита данных предусматривается только от неквалифицированных действий пользователей.

В качестве входных данных используется текстовой файл Список.txt. Выходные данные программы – графическое отображение результатов в листбоксах – для исходного и отсортированных списков, в форме для SmartDevice.

Шаг 1. Разработка графического интерфейса

Используется только одна форма Form1 с текстовым полем, кнопкой добавления записей в текстовой файл, кнопкой загрузки данных текстового файла в listBox1 и кнопкой сортировки и загрузки данных из listBox1 в listBox2. Примерный дизайн формы приведен на рис.5.1.


Рис. 5.1.

Шаг 2. Расширяем состав системных библиотек

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
//добавляем библиотеку
using System.IO;

Шаг 3. Тестируем наличие файла Список.txt в public Form1()

InitializeComponent(); // после этой строки вставляем:
/* Тестируем наличие файла с данными о сотрудниках и создаем файл 
для записи значений 
*/
FileStream fin;
try {
fin=new FileStream("Список.txt",FileMode.OpenOrCreate);
	fin.Close();
	}
catch(IOException exc)	{
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;
	}

Шаг 4. Создаем процедуру ввода новых записей в файл

Для кнопки "Добавить в список" пишем:

private void button1_Click_1(object sender, System.EventArgs e)
{// Проверяем пустое поле
if (textBox1.Text!=" ")	{// если поле не пустое
//Автоматически переводим текст в верхний регистр
string s=textBox1.Text.Trim().ToUpper()+"\r\n";
// открываем файл для записи
StreamWriter fin_out;
try	{
fin_out=new StreamWriter("Список.txt", true);
	}
catch(IOException exc)	{
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;}
fin_out.Write(s); // записываем в файл новую строку
fin_out.Close();
MessageBox.Show(s,"Запись добавлена");
textBox1.Text=" "; // обнуляем текстовое поле
}
else	{
MessageBox.Show("Введите текст!","Ошибка");
return;}
}

Шаг 5. Создаем процедуру загрузки данных

Для кнопки "Загрузить" пишем:

private void button3_Click(object sender, System.EventArgs e) {
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.Trim().ToUpper());
	}
fstr_in.Close();
}

Шаг 6. Создаем процедуру удаления записей из listBox1

Для удаления записи из листбокса щелчком мыши пишем:

private void listBox1_SelectedIndexChanged
  (object sender, System.EventArgs e)
{// если листбокс не пустой
if (listBox1.SelectedItem != null) // удаляем запись 
listBox1.Items.Remove(listBox1.SelectedItem.ToString());
}

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

Для кнопки "Сортировать" пишем:

private void button2_Click(object sender, System.EventArgs e) {
listBox2.Items.Clear(); // чистим листбокс 2
if (listBox1.Items.Count!=0)	
  {/* если число сторк в листбокс 1 не равно 0, 
 создаем константу шаблона сортировки. Кстати, константу можно 
  создать и в другом месте программы.
*/
const string s_alfa="АБВГДЕЖЗИКЛМНОПРСТУФХЦШЩЭЮЯ";
// вычисляем длину выбранной строки из алфавита
for (int it=0;it<s_alfa.Length; it++)	{
string	s_sym=s_alfa.Substring(it,1);
string s_name=s_sym;	
// Вложенный цикл поиска повторений do-while
do { // вложенный цикл просмотра списка листбокса
	for(int i=0; i<listBox1.Items.Count;i++)
// сравниваем значения алфавита и листбокса
	{s_name=listBox1.Items[i].ToString().Substring(0,1);
	if (s_sym==s_name) {
		int i_row=i;
		if (i_row<=listBox1.Items.Count)	{
		string s_new=listBox1.Items[i_row].ToString();
		listBox2.Items.Add(s_new);
		listBox1.Items.Remove(listBox1.Items[i_row].ToString());}
		}
	}
}
while (s_sym==s_name & listBox1.Items.Count!=0);
	}
}
	else	{// если листбокс1 пустой, то	
MessageBox.Show("Введите текст!","Ошибка");
	return;}
}
< Лекция 5 || Лекция 6 || Лекция 7 >
jo jojo
jo jojo
Нидерланды
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург