Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 21.12.2014
Сообщений: 46
1

Поменять строки местами

15.06.2015, 19:25. Показов 2440. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните,пожалуйста,как это сделать.. Не получается совсем.
Создать файл из нескольких строк и поменять строки местами в обратном порядке.

Добавлено через 4 минуты
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;
 
type
  TMass = record
    Name : string;
    Ratio : integer;
  end;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    N4: TMenuItem;
    procedure N1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    f,ff : TextFile;
    FileName, s: ShortString;  
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.N1Click(Sender: TObject);
begin            //кнопка "Открыть"
  if OpenDialog1.Execute then begin
    Memo1.Lines.Clear;
    FileName := OpenDialog1.FileName; 
    AssignFile(f, FileName);  
    reset(f);           
    repeat
      readln(f, s);  
      Memo1.Lines.Add(s); 
    until eof(f);   
    CloseFile(f);  
  end;
end;
 
procedure TForm1.N3Click(Sender: TObject);
var              //кнопка "Записать"
  i : integer;
begin
  if SaveDialog1.Execute then
  begin
    FileName := SaveDialog1.FileName;
    AssignFile(f, FileName);
    rewrite(f);
    for i := 0 to Memo1.Lines.Count-1 do begin
      writeln(f, Memo1.Lines[i]);
    end;
    CloseFile(f);
  end;
end;
 
procedure TForm1.N4Click(Sender: TObject);
begin            //кнопка "Очистить"
  Memo1.Lines.Clear;
end;
 
procedure TForm1.N2Click(Sender: TObject);
type             //Кнопка "Обработать"
  TWord=string[20]; 
  TWords=array[1..100] of TWord;
var
 
  TextStr: string;  
  Words: TWords;  
  nw, i: integer;  
 
begin
  assignfile(f,FileName);  
  reset(f);
  assignfile(ff,'tfhfg');  
  rewrite(ff);
  nw:=0;
  while not eof(f) do
  begin
    readln(f,TextStr);  
    writeln(ff,TextStr); 
    while TextStr<>'' do
    begin
      Inc(nw);
      
 
    end;
  end;
  writeln(ff);
   for i:=1 to nw do writeln(ff,Words[i]);
  writeln(ff);
   for i:=nw downto 1 do writeln(ff,Words[i]);
  CloseFile(f);
  CloseFile(ff);
  end;
end.
Добавлено через 46 секунд
Может здесь где ошибка? не меняет местами. Скорее в кнопке "Обработать"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2015, 19:25
Ответы с готовыми решениями:

Поменять местами строки
Уважаемые форумчане, помогите, пожалуйста, довести до ума следующую задачу: Имеется матрица.Нужно:...

Поменять местами строки матрицы
Исходная 1 4 6 5 2 6 7 11 3 8 4 2 4 7 3 6 результирующая 4 7 3 6 3 8 4 2 2 6 7 11

Поменять местами строки матрицы
всем привет, срочно нужно решить задачу(с меня 50 руб),никак не могу((((( завтра сдавать отчет по...

Поменять местами слова строки
Дана строка символов из произвольного текста на английском языке, слова разделены пробелами....

9
4 / 4 / 1
Регистрация: 27.03.2015
Сообщений: 99
15.06.2015, 23:17 2
насколько я понимаю логику задания, Вам нужно считать все строки в массив, а потом пересоздать файл записывая туда строки начиная с конца массива. Вы этот алгоритм реализовывали?
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
15.06.2015, 23:47 3
Собственно у вас уже все есть. Задом наперед записать можно так:
Delphi
1
2
for i := Memo1.Lines.Count-1 downto 0 begin
      writeln(f, Memo1.Lines[i]);
0
0 / 0 / 0
Регистрация: 21.12.2014
Сообщений: 46
16.06.2015, 08:52  [ТС] 4
Работать нужно не с Мемо, а с файлом. В Мемо просто помещать начальный и конечный результат

Добавлено через 2 минуты
и когда нажимаю на кнопку "Обработать", всё зависает и больше никуда нажать нельзя
0
4 / 4 / 1
Регистрация: 27.03.2015
Сообщений: 99
17.06.2015, 09:00 5
судя по описанию программа уходит в бесконечный цикл
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.06.2015, 09:08 6
Цитата Сообщение от Daria_m Посмотреть сообщение
Работать нужно не с Мемо, а с файлом.
Может файл типизированный?
Delphi
1
var f:file of string;
0
57 / 57 / 37
Регистрация: 11.05.2015
Сообщений: 196
17.06.2015, 10:02 7
Цитата Сообщение от Daria_m Посмотреть сообщение
и когда нажимаю на кнопку "Обработать", всё зависает и больше никуда нажать нельзя
Ну у тебя есть такой цикл, из которого нельзя выйти
Цитата Сообщение от Daria_m Посмотреть сообщение
Delphi
1
2
3
4
while TextStr<>'' do
* * begin
* * * Inc(nw);
    end;
За тем следует вообще не понятные строки
Цитата Сообщение от Daria_m Посмотреть сообщение
Delphi
1
2
3
4
  writeln(ff);  //Что записываем в файл
* *for i:=1 to nw do writeln(ff,Words[i]);  //Хорошо что прошлый цикл не дает дойти до сюда, у тебя где заполняется этот массив?
* writeln(ff);  //Где-то я это уже видел...
* *for i:=nw downto 1 do writeln(ff,Words[i]);  //{Хм.. тоже знакомое, а нет тут в другую сторону записываем... странности какие-то происходят
Ну а так процедуру можно немного переписать
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.N2Click(Sender: TObject);
var
f,ff: File of Text;
BufStr: Array of String;
i: Integer;
begin
AssignFile(f,FileName);
Reset(f);
AssignFile(ff,'Test.txt');
ReWrite(ff);
i:=1;
While not (EOF(f)) do
begin
  SetLength(BufStr,i);
  Readln(f,BufStr[i-1]);
  Writeln(ff,BufStr[i-1]);
  Inc(i);
end;
CloseFile(f);
For i:=Length(BufStr)-1 downto 0 do Writeln(ff,BufStr[i]);
CloseFile(ff);
end;
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
17.06.2015, 10:05 8
Цитата Сообщение от Puporev Посмотреть сообщение
Может файл типизированный?
Код Delphi
1
var f:file of string;
Это что за зверь?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.06.2015, 10:17 9
Цитата Сообщение от northener Посмотреть сообщение
Это что за зверь?
Извини, не понял.
0
Rasomaha
17.06.2015, 10:18     Поменять строки местами
  #10

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
Это что за зверь?
northener, а ты когда-нибудь работал с типизированными файлами, или ты считаешь что файл может хранить только текст?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2015, 10:18

Как поменять местами строки?
Дана матрица размером NxM. Упорядочить ее строки по возрастанию их наибольших элементов. Вот...

Поменять местами строки матрицы
В матрице размером N x M поменять местами строку, содержащую элемент с наибольшим значением со...

Поменять местами строки. Не могу дорешать
Друзья, мучаюсь с задачей уже долго, не могу понять, что не так? Объясните плиз... Задача: Дан...

Попарно поменять местами строки матрицы
Щяс нужно зачет получить, а я в программирование полный ноль..помогите, если не сложно (в Delphi 7...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru