Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
stydentka
4 / 4 / 0
Регистрация: 21.03.2010
Сообщений: 64
1

файлы

23.02.2011, 12:17. Просмотров 404. Ответов 5
Метки нет (Все метки)

Здравствуйте. Помогите пожалуйста- подскажите алгоритм. Есть пары строк - имя раздела/книги и количество глав в нем- это все в одном файле. Нужно отсортировать по количеству глав в другом файле. Как можно их занести в другой файл? То есть имя, количество, опять имя , количество. Нужно ли их разделить например знаком ; и его замечать, и потом отсортировывать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 12:17
Ответы с готовыми решениями:

Написать программу, преобразующую XML-файлы в DDF-файлы
Нужно написать программу, преобразующую XMLфайлы в DDFфайлы... Посоветуйте с...

Файлы
Дан файл f, компоненты которого являются символами. Получить копию файла в...

файлы
необходимо внести данные из файла(компоненты векторов) и посчитать скалярное...

Файлы
Есть программа, она проверяет введенную информацию с файлом. Нужно что бы файл...

Файлы
помогите, у меня в label1.caption:=label1.caption+inttostr(i)+')' + buf; ...

5
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,590
23.02.2011, 12:35 2
пока не выложишь пример файла никто тебе не подскажет
0
stydentka
4 / 4 / 0
Регистрация: 21.03.2010
Сообщений: 64
23.02.2011, 12:37  [ТС] 3
Примера нет к сожалению. Хотелось бы узнать, подходящий ли алгоритм

Подскажите какую вкладку для работы открыть?
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
24.02.2011, 02:03 4
stydentka, чтобы обрабатывать информацию надо знать, как она представлена. anonimus, это имел в виду. Т. е., имя книги и количество глав в одной строке файла записаны? Или на разных строках? Если в одной строке - тогда надо выделять из строки название и количество.
Общий план действий такой:
Delphi
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
const
  Fn1 = 'file1.txt';
  Fn2 = 'file2.txt';
var
  F1, F2 : TextFile;
  Sl : TStringList;
  S, SName : String;
  i, Num : Integer;
begin
  Sl := TStringList.Create;
  AssignFile(F1, Fn1);
  Reset(F1);
  while not Eof(F1) do begin
    Readln(F1, S);
 
    //Здесь мы каким-то образом выделяем из прочитанной
    //строки S название книги SName и количество глав Num.
    //...
 
    //Добавляем полученные сведения в список
    //в виде пары: (строка, объект).
    Sl.AddObject(S, Pointer(Num));
  end;
 
  CloseFile(F1);
 
  //Здесь должна быть сортировка списка Sl
  //по значениям, записанным в качестве объектов.
  //...
 
  //После сортировки записываем данные во второй файл.
  AssignFile(F2, Fn2);
  Rewrite(F2);
  for i := 0 to Sl.Count - 1 do begin
    if i > 0 then Writeln(F2);
    SName := Sl[i];
    Num := Integer(Sl.Objects[i]);
    Write(F2, SName, '; ', Num);
  end;
 
  CloseFile(F2);
end;
1
stydentka
4 / 4 / 0
Регистрация: 21.03.2010
Сообщений: 64
27.02.2011, 13:38  [ТС] 5
спасибо. А если из двух?

например

book "Voina i mir"
kolichastvo tomov 4 ;

и если вот такие пары, отделенные точкой с запятой?
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
27.02.2011, 21:24 6
Пока предлагаю исходить из того, что информация о названии книги и количестве томов (глав) располагается в одной строке. И в качестве разделителя применяется знак ";".
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
const
  Fn1 = 'file1.txt';
  Fn2 = 'file2.txt';
var
  F : TextFile;
  Sl : TStringList;
  S : String;
  i, j, Num, P1 : Integer;
  Obj : TObject;
  Exch : Boolean;
begin
  //Текущей папкой делаем ту папку, в которой расположен исполняемый
  //файл программы.
  SetCurrentDir( ExtractFilePath(Application.ExeName) );
  //Проверка существования входного файла.
  if not FileExists(Fn1) then begin
    ShowMessage('Файл с именем: "' + Fn1 + '" не найден. Действие отменено.');
    Exit;
  end;
 
  //Создаём экземпляр списка.
  Sl := TStringList.Create;
  //Загружаем строки файла в список.
  //Sl.LoadFromFile(Fn1);
  AssignFile(F, Fn1);
  Reset(F);
  while not Eof(F) do begin
    Readln(F, S);
    Sl.Add(S);
  end;
  CloseFile(F);
 
  //Под видом ссылок на объекты записываем сведения о количестве томов.
  for i := 0 to Sl.Count - 1 do begin
    S :=Sl[i];
    P1 := Pos(';', S);
    S := Copy(S, P1 + 1, Length(S) - P1);
    Num := StrToInt(S);
    Sl.Objects[i] := Pointer(Num);
  end;
 
  //Сортировка строк списка Sl по возрастанию количества томов.
  //Вид сортировки - пузырьковая.
  for i := Sl.Count - 2 downto 0 do begin
    repeat
      Exch := False;
      for j := 0 to i do begin
        if Integer(Sl.Objects[j]) <= Integer(Sl.Objects[j + 1])
        then Continue;
        S := Sl[j];
        Obj := Sl.Objects[j];
        Sl[j] := Sl[j + 1];
        Sl.Objects[j] := Sl.Objects[j + 1];
        Sl[j + 1] := S;
        Sl.Objects[j + 1] := Obj;
        Exch := True;
      end;
    until not Exch;
  end;
 
  //Запись отсортированного списка в файл.
  //В случае Sl.SaveToFile(Fn2), в файле окажется завершающая пустая строка.
  //Sl.SaveToFile(Fn2);
  AssignFile(F, Fn2);
  Rewrite(F);
  for i := 0 to Sl.Count - 1 do begin
    if i > 0 then Writeln(F);
    S := Sl[i];
    Write(F, S);
  end;
  CloseFile(F);
 
  //Удаляем список из памяти.
  Sl.Free;
end;
Вместо списка TStringList можно переделать на динамический массив.
1
27.02.2011, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 21:24

Файлы
Дан файл f, компоненты которого являются символами. Записать в файл g...

Файлы
Дан файл f, компоненты которого являются целыми числами. Никакая компонента...

Файлы.
1)В заданном предложении указать, сколько раз каждый символ встречается в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru