Страница 1 из 1

сортировка строк в файле по N-ному слову C#

Добавлено: 26 дек 2009, 19:47
drumer91
Привет, помогите написать следующую программу:
Исходный текстовый файл содержащий табличные данные (разделители-пробелы).Отсортировать по значениям N-ного столбца методом вставки по возрастанию(принцип сравнения-лексико-орфографический(как в словаре))
вот тут сам пытался

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class SortNTower
{
    public string SearchWord(int num, string str)//поиск n-ного элемента в строке
    {
        int nCount = 0;
        int i;
        string str1 = "";
        bool WasSpace = true;
        bool NotSpace = false;
        int j = 0;
        int u = 1;
        for (i = 0; i < str.Length; i++)
        {
            if (str[i] != ' ' && str[i] != '\t')
            {

                NotSpace = true;
                if (WasSpace)
                {
                    WasSpace = false;
                    nCount++;

                    if (num == nCount)
                    {
                        j = i;
                        if (i == str.Length - 1)
                            str1 = str.Substring(j);
                    }
                }
                else
                {
                    if (nCount == num)
                    {
                        u++;
                        if (i == str.Length - 1)
                            str1 = str.Substring(j, u);
                    }
                    else
                        continue;
                }

            }
            else
            {
                WasSpace = true;
                if (NotSpace)
                {
                    NotSpace = false;
                    if (nCount == num)
                    {
                        str1 = str.Substring(j, u);
                        break;
                    }
                    else continue;
                }
                else
                    continue;



            }

        }
        return str1;
    }
    public bool sravnenie(string strX, string str2)
    {
        int iLen = 0;
        bool menshe=false;
        int i;
        if (strX.Length > str2.Length)
            iLen = str2.Length;
        else
            iLen = strX.Length;
        for (i = 0; i < iLen; i++)
        {
            if (strX[i] < str2[i])
                menshe = true;
            else
                menshe = false;

        }
        return menshe;

    }
    public void ShowFile()//показ файла
    {
        int i = 0;
        StreamReader sr = File.OpenText(@"F:\data.txt");  //открываем фаил
        string s;
        //int nCount = 0;
        s = sr.ReadLine();  //читается первая строка из фаила. Если фаил пустои то s = null
        while (s != null)
        {
            Console.WriteLine(s);
            s = sr.ReadLine();
            i++;
        }
       

        //  sr.Close();
      
       
    }
    public int AmountOfStr()
    {
        int i = 0;
        StreamReader sr = File.OpenText(@"F:\data.txt");  //открываем фаил
        string s;
        //int nCount = 0;
        s = sr.ReadLine();  //читается первая строка из фаила. Если фаил пустои то s = null
        while (s != null)
        {
            s = sr.ReadLine();
            i++;
        }
        return i;

    }//подсчёт количества строк в файле


}


namespace _privet
{
    class Program
    {
        static void Main(string[] args)
        {
            SortNTower now = new SortNTower();
            Console.WriteLine("Исходный файл: ");
            now.ShowFile();
            Console.WriteLine("Введите номер столбца, по которому отсортировать файл: ");
            int iStr = now.AmountOfStr();
            Console.WriteLine("Количество строк в файле = "+iStr);
            int N=int.Parse(Console.ReadLine());
           
            int i=0;
            string strX;//
            string str2;
            StreamReader sr = File.OpenText(@"F:\data.txt");  //открываем файл
            string X;
            X= sr.ReadLine();
            strX = now.SearchWord(N, X);
           while (X!= null)
        {
            
            X = sr.ReadLine();
            i++;
        }
            Console.WriteLine(strX);
            Console.ReadLine();


           }

        }
    }




Re: сортировка строк в файле по N-ному слову C#

Добавлено: 27 дек 2009, 01:52
Newbie
Не идельное решение но работает :)

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

using System;
using System.Collections.Generic;
using System.IO;

namespace SortFile
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] data = File.ReadAllLines("test.txt");
            string[][] sdata = PrepareData(data); // получаем матрицу значений
	    sortdata(ref sdata, 0); // сортируем, на выходе sdata будет отсортирована по 0 столбцу
        }

                // сортировка вставкой по возрастанию
		private static void sortdata(ref string[][] sdata, int p)
		{
			int count = sdata.GetLength(0);
			for(int i = 1; i < count; i++)
			{
				for(int j = 0; j <= i; j++)
				{
                                        if(i == j) continue;
					if (string.Compare(sdata[i][p],sdata[j][p]) < 0)
                                        {
						swap(ref sdata[i][p], ref sdata[j][p]);
                                               break;
                                         }
				}
			}
		}

		private static void swap(ref string l, ref string r)
		{
			string temp = l;
			l = r;
			r = temp;
		}

        //бьем массив строк на матрицу, деля строку на массив по разделителю  ' '
        private static string[][] PrepareData(string[] data)
        {
            int count = data.Length;
			string[][] res = new string[count][];
            for(int i = 0; i < count; i++)
			{

				res[i] = data[i].Split(' ');
			}
			return res;
        }
    }
}

Re: сортировка строк в файле по N-ному слову C#

Добавлено: 03 янв 2010, 13:19
drumer91
спасибо)
но надо сделать не используя массив для всего файла
вот ещё вопрос, как ВЫРЕЗАТЬ строку из одного файла и вставить её в другой файл?

Re: сортировка строк в файле по N-ному слову C#

Добавлено: 04 янв 2010, 15:03
drumer91
помогите!!!
как ВЫРЕЗАТЬ строку из одного файла и вставить её в другой файл?

Re: сортировка строк в файле по N-ному слову C#

Добавлено: 04 янв 2010, 15:09
Newbie
msdn открой для начала)

Re: сортировка строк в файле по N-ному слову C#

Добавлено: 04 янв 2010, 16:03
Romeo
Для того, чтобы удалить из файла какую-то его часть (например строку) нужно:

1. Открыть файл и вычитать его содержимое в память.
2. Переоткрыть файл на запись (это обнулит его размер).
3. Записать в переоткрытый файл все строки за исключением той, которую нужно было вырезать.
4. Закрывать файл.

Специальной функции "вырежьте мне строку" нету.