Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 01:40   #1
Шушелла
Пользователь
 
Регистрация: 24.10.2007
Сообщений: 15
По умолчанию сортировка строк в txt

Привет.
У меня такая проблема-надо отсортировать строки в файле по трем столбцам.Строк очень много-около 30000000, поэтому структуры данных типа массива отпадают при реализации.Подскажите, что можно сделать..Язык-лучше C#
Шушелла вне форума Ответить с цитированием
Старый 23.04.2010, 06:08   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Вот те новость.... а почему отпадает структура типа массив? Я еше понимаю в переменную одну не влезут, а почему массив то отпадает?

Как я понимаю сейчас в файле имеется слова(по одному в строчке) и данных строк 30 000 000. Угадал?

Создаете массив стринг
Код:
string[] s = new string[30000000];
Открываете файл, считываете построчно и записывайте данные в массив s.
Потом как вам нужно группируете ... можно создать еще дополнительный массив типа:
Код:
string[] sOut = new string[10000000];//тк три слова в предложении
в него записывайте как вам нужно s
И перезаписывайте построчно в файл массив sOut...
Вроде все....
dampirik вне форума Ответить с цитированием
Старый 23.04.2010, 11:46   #3
Шушелла
Пользователь
 
Регистрация: 24.10.2007
Сообщений: 15
По умолчанию

Спасибо,но это должно очень медленно работать)
Шушелла вне форума Ответить с цитированием
Старый 23.04.2010, 22:07   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Цитата:
Спасибо,но это должно очень медленно работать)
из каких соображений?
Массив размерностью 5000х3000 записывается почти моментально....
Если это вы переведете в мегабайты и сравните со скростью записи на жеский, то поймете, что это довольно мало)

Последний раз редактировалось dampirik; 23.04.2010 в 23:58.
dampirik вне форума Ответить с цитированием
Старый 23.04.2010, 22:54   #5
Шушелла
Пользователь
 
Регистрация: 24.10.2007
Сообщений: 15
По умолчанию

PHP код:
 string[] lines File.ReadAllLines(path); 
Выполнялось 3 часа,а потом выпало с outofmemory exception
Шушелла вне форума Ответить с цитированием
Старый 23.04.2010, 23:07   #6
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Код:
StreamReader file = new StreamReader(filePath); 
string line = String.Empty;
while ((line = file.ReadLine()) != null) 
{ 
      .....
}
akasex вне форума Ответить с цитированием
Старый 23.04.2010, 23:43   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Цитата:
Выполнялось 3 часа,а потом выпало с outofmemory exception
Код в студию!
Код:
string time="";
string path="data.txt";
DateTime dt=DateTime.Now;
string s[] = new string[30000000];
for(int i=0;i<s.Length;i++)
{
s[i]="dasdasdafsfsdfds";
}
time="Создание массива: ";
time+=(DateTime.Now-dt).ToString()+"\n";
DateTime cr= DateTime.Now;
using(StreamWriter sw= File.CreateText(path))
{
for(int i=0;i<s.Length;i++)
{
sw.WriteLine(s[i]);
}
}
time+="Запись  массива: ";
time+=(DateTime.Now-cr).ToString();
this.label1.Text=time;
Результаты:
Создание массива: 00:00:00.2430196
Запись массива: 00:00:03.9493975

Это не есть быстрые функции, но наглядно показывают время работы...
dampirik вне форума Ответить с цитированием
Старый 24.04.2010, 02:03   #8
Шушелла
Пользователь
 
Регистрация: 24.10.2007
Сообщений: 15
По умолчанию

Переписала на ваш манер) если уж ReadAllLines() не хочет работать)
Ну вот уже 30 мин читает в массив..

Код:
class StringComparer : IComparer<string>
        {
            public string[] split1;
            public string[] split2;
            public int Compare(string s1, string s2)
            {
                split1 = s1.Split('\t');
                split2 = s2.Split('\t');
                s1 = split1[0] + split1[1] + split1[0];
                s2 = split2[0] + split2[1] + split2[0];
                return (s1.CompareTo(s2));
            }
        }
        static void Main(string[] args)
        {
            string s;
            int inc = 0;

            string[] str1 = new string[30000000];

            string path = "E:\\ms_new.txt";
            string path1 = "E:\\ms_new1.txt";
       
            StreamReader file = new StreamReader(path); 
            string line = String.Empty;
            int p=-1;
            while ((line = file.ReadLine()) != null) 
            { 
                  str1[++p]=line;
            }
            Array.Resize(ref str1, p + 1);
            Array.Sort(str1, new StringComparer());
            using (StreamWriter sw = File.CreateText(path1))
            {
                for (int i = 0; i < str1.Length; i++)
                {
                    sw.WriteLine(str1[i]);
                }
            }

           
        }
    }
Шушелла вне форума Ответить с цитированием
Старый 24.04.2010, 15:39   #9
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

пол часа там сортировка идет, а чтение и запись максимум 2-3 минуты
m0nax вне форума Ответить с цитированием
Старый 24.04.2010, 18:23   #10
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Цитата:
пол часа там сортировка идет, а чтение и запись максимум 2-3 минуты
Ну это смотря как сортировать....
Поставьте временные метки и продемонтрируйте....
dampirik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 12:51
Кол-во строк в Txt в ProgressBar Oleg Romanchuk Помощь студентам 2 11.12.2009 15:12
Чтение частей строк из *.txt файлов HTL Общие вопросы Delphi 4 04.04.2009 20:50
Сортировка строчек из txt файла mmka Общие вопросы C/C++ 26 24.11.2008 17:47
Сформировать список строк L1, считав его из файла input.txt Gaika Помощь студентам 4 03.07.2008 07:33