Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
1 / 1 / 0
Регистрация: 13.06.2015
Сообщений: 24

Отсортировать данные в файле

13.06.2015, 22:59. Показов 6342. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В файле data.txt записаны числа, сколько их – неизвестно. Создать из него файл четных чисел и отсортировать их на диске.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2015, 22:59
Ответы с готовыми решениями:

Отсортировать по расширениям данные в файле
#include <windows.h> #include <stdio.h> #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> #include...

Отсортировать данные в файле, не помещая весь файл в память одновременно
Помогите написать программу, которая сортирует данные в файле, не помещая весь файл в память одновременно. В файле имеем случайное...

Отсортировать информацию в файле
Всем привет. Такая проблема - допустим есть txt файл с информацией пациентов, по типу: ||||Pacient|||| name: Alexei surname:...

9
Модератор
10416 / 5703 / 3401
Регистрация: 17.08.2012
Сообщений: 17,363
17.06.2015, 02:05
Цитата Сообщение от ZhukovaDan Посмотреть сообщение
data.txt
Все файлы текстовые, да? Точно не типизированные?
0
1 / 1 / 0
Регистрация: 13.06.2015
Сообщений: 24
17.06.2015, 08:36  [ТС]
Текстовые, точно)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
17.06.2015, 09:14
Цитата Сообщение от ZhukovaDan Посмотреть сообщение
Текстовые, точно)
Но текстовые файлы нельзя сортировать,только переписать например в массив, там отсортировать и снова записать в файл. Вам бы с заданием разобраться.
0
Модератор
10416 / 5703 / 3401
Регистрация: 17.08.2012
Сообщений: 17,363
17.06.2015, 09:31
Puporev, единственная сортировка, которую кое-как можно применить к текстовым файлам - пузырьковая, так как в этом случае при обмене двух строк все остальные строки не нужно как-либо перемещать. Но это если объявить файл как типизированный символьный и анализировать его содержимое врукопашную. Полагаю, что это в данном случае неприемлемо, поскольку ТСу при сдаче программы вряд ли удастся доказать преподавателю, что он смог написать такое чудо. Будет время, напишу программу, чисто из спортивного интереса...

Хотя, организация дополнительного типизированного файла (исключительно для сортировки) вроде бы заданию не противоречит...
0
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
17.06.2015, 11:02
В задании прослеживается логика:
1. Есть текстовый файл с числами:
Цитата Сообщение от ZhukovaDan Посмотреть сообщение
В файле data.txt записаны числа, сколько их – неизвестно.
2. Создать другой файл (который как раз и будет типизированным), на основе данных полученных из текстового.
Цитата Сообщение от ZhukovaDan Посмотреть сообщение
Создать из него файл четных чисел
И тут уже ничего не мешает провести сортировку с новым типизированным файлом.
0
1 / 1 / 0
Регистрация: 13.06.2015
Сообщений: 24
28.06.2015, 15:26  [ТС]
а как это сделать?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
28.06.2015, 16:00
Pascal
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
uses crt;
var f:text;
    g:file of integer;
    n,i,a,b,j:integer;
begin
assign(f,'data.txt');{файл в папке с программой}
reset(f);
assign(g,'fileG');
rewrite(g);
writeln('Содержание текстового файла');
while not seekeof(f) do
 begin
  read(f,a);
  write(a,' ');
  if a mod 2=0 then write(g,a);
 end;
close(f);
writeln;
reset(g);
if filesize(g)=0 then
 begin
  write('В исходном файле нет четных чисел');
  close(g);
  readln;
  exit;
 end;
reset(g);
for i:=0 to filesize(g)-2 do
for j:=i+1 to filesize(g)-1 do
 begin
  seek(g,i);
  read(g,a);
  seek(g,j);
  read(g,b);
  if a>b then
   begin
    seek(g,i);
    write(g,b);
    seek(g,j);
    write(g,a);
   end;
 end;
writeln('Содержание отсортированного файла четных чисел:');
reset(g);
while not eof(g) do
 begin
  read(g,a);
  write(a,' ');
 end;
close(g);
end.
0
Модератор
10416 / 5703 / 3401
Регистрация: 17.08.2012
Сообщений: 17,363
28.06.2015, 16:28
Хм... Не успел... Ну да ладно, выложу. Вариант без вывода файлов на дисплей и с более быстрой сортировкой:
Pascal
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
var f: text;
    g: file of integer;
    n, ni, nj, t, pm: integer;
    i, j: longword;
begin
  assign(f, 'input.txt');
  reset(f);
  assign(g, 'sort.dat');
  rewrite(g);
  while not eof(f) do {чтение из текстового файла и запись чётных чисел в типизированный файл}
    begin
      readln(f, n);
      if not odd(n) then write(g, n)
    end;
  close(f);
  if filesize(g) = 0
    then begin
      close(g);
      erase(g);
      write('Even numbers not found');
      readln
    end
    else begin
      reset(g);
      {сортировка}
      for i := 0 to filesize(g) - 2 do {с начала файла до предпоследнего элемента ищем минимумы}
        begin
          pm := i; {позиция текущего минимума}
          seek(g, i); {переходим к этой позиции}
          read(g, ni); {запоминаем значение текущего минимума}
          nj := ni; {пока считаем текущий элемент минимальным}
          for j := i + 1 to filesize(g) - 1 do {со следующей позиции до конца файла проверяем}
            begin
              read(g, t); {читаем следующий элемент для сравнения}
              if t < nj {если элемент меньше текущего минимума}
                then begin {то}
                  pm := j; {запоминаем позицию}
                  nj := t {пока считаем найденный элемент минимальным}
                end
            end;
          if pm <> i then {если найден элемент меньше ni}
            begin {то меняем ni и nj местами}
              seek(g, pm);
              write(g, ni);
              seek(g, i);
              write(g, nj)
            end
        end;
      {#### перезапись результата из типизированного в текстовый файл, если не нужна (что вряд ли) - выкинуть}
      assign(f, 'output.txt');
      rewrite(f);
      reset(g);
      for i := 0 to filesize(g) - 1 do
        begin
          read(g, n);
          writeln(f, n)
        end;
      close(f);
      {#### конец перезаписи типизированного файла в текстовый}
      close(g)
    end
end.
0
Модератор
10416 / 5703 / 3401
Регистрация: 17.08.2012
Сообщений: 17,363
30.06.2015, 20:39
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Будет время, напишу программу, чисто из спортивного интереса...
Время было.

Итак, небольшое шоу:

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

Каждое число должно быть записано в отдельной строке.
Pascal
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
const CR: char = #13;
      LF: char = #10;
 
var F: file of char;
    Pos1, Pos2: longword;
    String1, String2: string;
    N1, N2: longint;
    Symbol: char;
    NoSwap: boolean;
    Error, StringCount, i: integer;
 
//процедура чтения строки из файла с текущей позиции файла
procedure ReadString(var s: string; var n: integer);
var c: char;
begin
  s := '';
  repeat
    read(F, c); //читаем символ из файла
    if not (c in [LF, CR]) then s := s + c //пишем в строку, если символ не LF или CR
  until c = LF; //читаем из файла до LF
  if not (s[1] in ['0'..'9', '-', '+']) then Error := 1;
  //эта проверка для совместимости с диалектами паскаля, в которых процедура val
  //игнорирует (пропускает) неправильное начало строки
  if Error = 0 then val(s, n, Error) //если начало строки верное, пытаемся строку преобразовать в число
end;
 
//процедура печати строки в файл с текущей позиции файла
procedure WriteString(s: string);
var i: integer;
begin
  for i := 1 to length(s) do write(F, s[i]);
  write(F, CR, LF)
end;
 
begin
  assign(F, 'file.txt');
  reset(f);
  //правим невидимое и неверное в конце файла и тестируем на нулевую длину
  while (FileSize(F) > 0) do
    begin
      Pos1 := FileSize(F) - 1; //переходим в конец файла
      seek(F, Pos1);
      read(F, Symbol); //читаем символ
      if not (Symbol in ['0'..'9']) //если последний символ не цифровой, усекаем файл
        then begin
          seek(F, Pos1);
          truncate(F);
        end
        else break
    end;
  write(F, CR, LF); //добавляем разделитель строк в конец файла
  if FileSize(F) = 2 //если файл пустой,
    then writeln('Файл не содержит чисел.') //то печатаем сообщение и сортировку не выполняем
    else begin //иначе сортируем файл
      //Пузырьковая сортировка
      Error := 0; //пока считаем, что ошибок нет
      repeat
        reset(F); //начало очередного прохода: позиция в файле = 0
        Pos1 := 0; //очередная позиция первого числа
        StringCount := 1; //счётчик строк = 1
        NoSwap := TRUE; //перестановок ещё не было
        ReadString(String2, N2); //читаем первую строку во второе число
        while (Error = 0) and not EOF(F) do //цикл очередного прохода сортировки
          begin
            N1 := N2; //переносим второе число в первое
            String1 := String2;
            Pos2 := FilePos(F); //запоминаем позицию второго числа
            inc(StringCount); //счётчик строок + 1
            ReadString(String2, N2); //читаем второе число
            if (Error = 0) and (N1 > N2) //если нет ошибок и первое число больше
              then begin //то меняем числа местами
                NoSwap := false; //был обмен
                seek(f, Pos1); //переходим на позицию первого числа
                WriteString(String2); //выводим в файл сначала второе число
                Pos1 := FilePos(F); //позиция очередного первого числа
                WriteString(String1); //затем выводим в файл первое число
                N2 := N1; //присваиваем второму числу первое
                string2 := String1
              end
              else Pos1 := Pos2 //иначе второе число становится очередным первым
          end;
      until (Error > 0) or NoSwap; //сортировать до тех пор, пока есть обмен
      {Если в файле есть ошибочные строки, печатаем сообщение}
      if Error = 0
        then writeln('Сортировка завершена.')
        else begin
          writeln('Сортировка не завершена, ошибка в строке ', StringCount, ':');
          writeln('"', string2, '"');
          for i := 1 to Error do write(' ');
          writeln('^')
        end
    end;
  close(F);
  write('Нажмите <Enter> для выхода из программы.');
  readln
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2015, 20:39
Помогаю со студенческими работами здесь

Отсортировать информацию в файле
Подскажите, как отсортировать информацию из файлов в с++??? Заголовок темы изменен модератором. Он должен быть информативным,...

Отсортировать строки в файле
Всем добрый вечер! Собственно, задача: Имеются подобные строки в файле: | 73 || ] || ] || 365 || 133225 || ] || ] | 1 || ] ||...

Отсортировать дроби, лежащие в файле
Здравствуйте,есть такая задача. Даны дроби в двух массивах (числитель и знаменатель) 1 2 1 3 1 4 1 5 2 3 2 5 3 4

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

Отсортировать записи в типизированном файле.
Дан типизированный файл student.txt В него записаны ученики и их баллы. Программа создает дерево и выводит его. Задача в том, чтобы...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru