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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2015, 23:30   #1
V-alterman
Пользователь
 
Регистрация: 07.12.2013
Сообщений: 26
По умолчанию В текстовом файле поменять местами первую и последнюю строки. Найденные строки показать на экране

Здравствуйте! Не могу понять, как организовать алгоритм, пол дня уже просидел.
Заранее спасибо за помощь!
Под x86.
V-alterman вне форума Ответить с цитированием
Старый 22.05.2015, 21:50   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..и чё, нашёл алгоритм?
Ну с первой строкой нет проблем, а вот с последней - напряг.

Если вводить текст в самой программе, то можно будет установить режим (пусть будет 80х25) и вычислить общее кол-во строк/символов в тексте. В этом случае легко узнать, сколько символов в последней строке (если строка не полная).

Условие точно такое, как ты написал? Может нужно поменять первое предложение с последним?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 22.05.2015, 23:23   #3
V-alterman
Пользователь
 
Регистрация: 07.12.2013
Сообщений: 26
По умолчанию

Да с логикой я разобрался. Только проблем много с кодом. На самом деле можно просто узнать размер файла, динамически выделить сегмента памяти такого же размера, потом считать туда файл, а дальше уже цикл по поиску символа переноса каретки, так мы узнаем начало и конец первой строки; зная адрес конца нашего файла в области, мы можем в цикле с декрементацией адреса найти начало последней строки. А вычисляем размер последней строки, вычитая из адреса конца адрес начала строки, и с адреса начала начинаем записывать такое количество байтов, которое соответствует размеру строки. А дальше всё и так понятно. :3
V-alterman вне форума Ответить с цитированием
Старый 23.05.2015, 09:37   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от V-alterman Посмотреть сообщение
...цикл по поиску символа переноса каретки
..ты думаеш этот символ там есть? Если при создании файла юзер не ввёл его, то переноса каретки и не будет.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 23.05.2015, 14:49   #5
V-alterman
Пользователь
 
Регистрация: 07.12.2013
Сообщений: 26
По умолчанию

Ну тогда файл будет в одну строку.
V-alterman вне форума Ответить с цитированием
Старый 23.05.2015, 17:22   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Открой текстовый редактор 'AkelPad', нажми какую-нить клавишу и держи секунд(10). Теперь жми [Ctrl+U] и увидиш, что текст расположиться или в одну строчку или с "переносом по-словам", которые подставит сам текстовый редактор.

Можно-ли надеяться на его перенос - точно не знаю, нужно тестить. Но если ты сам будеш нажимать по-окончании строки "Enter", то это будет надёжней и может послужить тебе фактором для начала строки..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 23.05.2015, 22:52   #7
spolyr
Пользователь
 
Регистрация: 30.03.2015
Сообщений: 17
По умолчанию

Под DOS пишешь ?
Объем файла какой?
Строки плавающей длины или фиксированной ?
если что под dos могу помочь
spolyr вне форума Ответить с цитированием
Старый 23.05.2015, 23:37   #8
V-alterman
Пользователь
 
Регистрация: 07.12.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от spolyr Посмотреть сообщение
Под DOS пишешь ?
Объем файла какой?
Строки плавающей длины или фиксированной ?
если что под dos могу помочь
Под dos. Да обычная универская задачка. Строки разной длины, объём файла, хм..., если что, то можно уведомить пользователя об ограничениях по размеру файла-ничего страшного. У меня есть набросок, но он косячный слишком.

Последний раз редактировалось V-alterman; 23.05.2015 в 23:50.
V-alterman вне форума Ответить с цитированием
Старый 24.05.2015, 11:15   #9
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от V-alterman Посмотреть сообщение
У меня есть набросок, но он косячный слишком.
..скинь сюда его, посмотрим.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 24.05.2015, 11:27   #10
V-alterman
Пользователь
 
Регистрация: 07.12.2013
Сообщений: 26
По умолчанию

Даже стыдно как-то такое показывать, мы просто пишем на ассемблере месяца 2 всего.
Код:
.386
dseg segment use16
text db 'Vvedite put k failu: $'
text1 db 'Oshibka otkritiya faila!$'
text3 db 'Ne udalos videlit pamyat!$'
filename db 30, 29 dup(?)
dseg ends
eseg segment use16
sizefile dw ?
nstr1 dw ?
estr1 dw ?
nstrend dw ?
estrend dw ?
handle dw ?
eseg ends
cseg segment use16
assume ds: dseg, cs: cseg, es: eseg
;загрузка регистров-указателей сегмента ds, es
begin: mov cx, dseg 
       mov ds, cx
       mov cx, eseg
       mov es, cx
;ввод имени файла
	mov ah,9
	lea dx,text
	int 21h
	mov ah,0ah
	lea dx,filename
	int 21h
;открытие файла для чтения/записи
	lea si,ds:filename+1
	movzx bx,byte ptr ds:[si]
	inc si
	mov byte ptr ds:[bx+si],0
	mov dx,si
	mov al,2
	mov ah,3dh
	int 21h
	mov es:handle, ax
        jc error	
;определим размер файла
mov bx, ax
mov cx,0
mov dx,0
mov al,2
mov ah, 42h
int 21h
mov es:sizefile, ax
;выделим память
mov cx, 16
mov dx, 0
div cx
cmp dx,0
je short m0
inc ax
m0:mov bx, ax
mov al, 0
mov ah, 48h
int 21h
jc errormem
mov es:nstr1, ax
;считаем файл в память
mov ds, ax
mov bx, es:handle
mov cx, es:sizefile
mov dx, ax
mov al, 0
mov ah, 3fh
int 21h
;определение конца первой строки
mov cx, es:sizefile
mov si, es:nstr1
string1:cmp byte ptr ds:[si], 0dh
je short m1
jmp short m2
m1:inc si
cmp byte ptr ds:[si],0ah
jne short m2
mov cx,0
jmp m6
m2:inc si
m6:loop string1
mov es:estr1, si
;определение начала и конца последней строки
mov si, es:nstr1
add si, es:sizefile
mov es:estrend, si
cmp byte ptr ds:[si], 0ah
jne short m3
mov cx, 2
stringelse:
dec si
loop stringelse
m3:mov cx, es:sizefile
string2:cmp byte ptr ds:[si], 0ah
jne short m4
dec si
mov cx,0
jmp short m5
m4:dec si
m5: loop string2
mov es:nstrend,si
;установка указателя на начало файла
mov bx, es:handle
mov al, 0
mov cx, 0
mov dx, 0
mov ah, 42h
int 21h
;запись последней строки на место первой в файл
mov dx, es:nstrend
mov cx, es:estrend
sub cx, es:nstrend
mov al, 0
mov ah, 40h
int 21h
;запись строк между первой и последней
mov dx, es:estr1
mov cx, es:nstrend
sub cx, es:estr1
mov al, 0
mov ah, 40h
int 21h
;запись первой строки на последнее место в файле
mov dx, es:nstr1
mov cx, es:estr1
sub cx, es:nstr1
mov al, 0
mov ah, 40h
int 21h
;закрытие исходного файла
	mov al, 0
	mov ah,3eh
	int 21h

exit:	mov ah, 4ch
	int 21h
errormem:mov ah, 9
	lea dx, ds:text3
	int 21h
	jmp short exit

error:	mov ah, 9
	lea dx, ds:text1
	int 21h
	jmp short exit

cseg ends
end begin

Последний раз редактировалось V-alterman; 24.05.2015 в 11:30.
V-alterman вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В текстовом файле найти все слова, совпадающие с заданным пользователем и поменять их местами с соседними справа словами ( c# ) CROWN Помощь студентам 4 24.12.2014 15:57
Поменять местами первую и последнюю , вторую и предпоследнюю и т.д цифры числа Kat9 Паскаль, Turbo Pascal, PascalABC.NET 2 22.05.2013 14:35
подпрограмма поменять местами первую и последнюю строки (C#) RIOs Помощь студентам 1 05.07.2012 22:36
Удалить из строки S1 первую, последнюю, все подстроки совпадающие с S2 ТРОЯН=) Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 23:28
Как поменять строки в текстовом файле местами _ares_ Помощь студентам 8 13.11.2007 02:14