Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
1

Вывод названия второго файла в каталоге

16.01.2016, 18:13. Просмотров 860. Ответов 6
Метки нет (Все метки)

Программа выводит названия всех файлов, которые находятся в указанном каталоге(вводится с клавиатуры). Как можно сделать чтобы выводило только название ВТОРОГО файла в каталоге. Подскажите пожалуйста!
Assembler
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
        .model     tiny
        .code
        org        100h         ; СОМ-файл
start:
    push cs         ;на всякий случай, приравняем cs и ds
    pop ds          ;хотя в COM-файле они и так равны
 
    mov ah, 9       ;выводим на экран сообщение
    lea dx, msgpathrequest  ;в сообщении - просьба ввести имя каталога
    int 21h
 
    mov ah, 0Ah     ;вводим с клавиатуры строку
    lea dx, path        ;указываем на буфер ввода
    int 21h         ;буфер ввода имеет хитрую структуру
                ;первый байт - макс длина буфера
                ;во второй байт система положит количество считанных символов
                ;а с третьего байта начинается собственно буфер
 
    lea dx, pathstring  ;возьмём адрес начала введённой строки
    push dx         ;сохраним - этот адрес ещё понадобится
    add dl, byte ptr[pathactual]    ;к началу строки прибавим её длину, которую вернула предыдущая функция
    xor al, al      ;поправим старший регистр
    adc dh,al       ;типа а вдруг перенос? :)
    mov di, dx      ;поскольку имя каталога должно кончаться нулём,
    mov byte ptr[di], al    ;дадим ему в конце этот нуль
 
    mov ah, 3Bh     ;сменим каталог
    pop dx          ;на тот, что вводили
    int 21h
    jc no_such_directory    ;а если его нету - пойдём ругаться  
    
    
    mov ah,1ah
        mov dx,offset dta
        int 21h
        
    ;Ищем первый файл
    mov ah,4Eh          ; поиск первого файла
        mov cx,2h           ; указываем, что хотим найти скрытые файлы
    lea dx,searchPath
        int 21h
        jc  no_more_files   ; если CF = 1 - файлы кончились
 
print:
        mov ah,9h       ; вывод
        mov dx,offset dta + 1eh ; имени файла
        int 21h
 
    ; перевод на новую строку
        mov ah,9h
        mov dx,offset crlf
    int 21h
 
        mov ah,4Fh              ; найти следующий файл
    mov dx,offset dta
        int 21h
    jc  no_more_files
    jmp print       ;закрываем цикл
 
no_such_directory:
    mov ah, 9       ;вывод сообщения
    lea dx, msgnosuchdir    ;указываем адрес сообщения
    int 21h
    jmp no_more_files
 
no_more_files:                         ; если файлы кончились,
        mov ah,9h
        mov dx,offset message
        int 21h
    
        ; задержка
        xor ax,ax
        int 16h
   
        mov ah,4ch
        int 21h
 
 
msgpathrequest    db 0Ah, 0Dh, "Enter the full directory name: $"
msgnomorefiles  db 0Ah, 0Dh, "No files found in current directory$"
msgnosuchdir    db 0Ah, 0Dh, "No such directory$"
crlf db 0Dh,0Ah,'$' ;аналогично, новая строка
searchPath  db "*.*",0
dta     db 2ch dup (?)
        db "$"
message db 'Press any key...','$'
path        label byte  ;указатель на буфер ввода строки
pathlen     db 66
pathactual  db ?
pathstring  db 66 dup (?)
 
end  start
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2016, 18:13
Ответы с готовыми решениями:

Реализовать поиск файла в каталоге и вывод на консоль заданных атрибутов найденного файла
Приведите, пожалуйста, пример кода программы, которая ищет файлы, находящиеся в каталоге, и выдаёт...

Считывать все названия файлов в указанном каталоге
Доброго времени суток всем. Столкнулся с такой проблемой: Есть у меня папка с файлами, нужна...

Просмотреть с помощью boost::filesystem все файлы в рандомном каталоге, и вывести названия файлов
Доброго времени суток, помогите плиз. Как с помощью библиотеки boost::filesystem просмотреть все...

Если число из второго файла больше числа в первом, то число из второго файла записывается в первый файл на место меньшего
добрый вечер. дано два файла, содержащих одинаковое количество целых чисел. перезаписать первый...

При применении gets_s названия начинают вводиться со второго элемента
Здравствуйте! Проблема несложная,но всё равно данную тонкость не понять. в данном фрагменте...

6
R71MT
16.01.2016, 20:45
  #2

Не по теме:

Цитата Сообщение от Dialkord228 Посмотреть сообщение
Как можно сделать чтобы выводило только название ВТОРОГО файла в каталоге.
..от куда ты берёшь эти задания?!

0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
16.01.2016, 20:56  [ТС] 3
R71MT, преподаватель даёт...
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
16.01.2016, 23:06 4
Лучший ответ Сообщение было отмечено Dialkord228 как решение

Решение

..так убери цикл, и выводи имя второго файла, пропустив имя первого:

Assembler
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
ORG 100h
JMP start
 
newDTA  DB  45 DUP('$')       ; область "DISK TRANSFER AREA"
fName   DB  '*.COM',0         ; ищем COM-файлы
noFile  DB  '<--- ERROR!$'    ;
 
start:
   MOV   AH,1Ah               ; создать DTA
   MOV   DX,newDTA            ;
   INT   21h                  ;
 
   MOV   AH,4Eh               ; искать файл!
   MOV   CX,02h               ;
   MOV   DX,fName             ; маска для поиска
   INT   21h                  ;
   JC    error                ; ошибка?
 
;   MOV   AH,9                ; раскомментируй,
;   MOV   DX,newDTA+30        ;    если хочешь вывести,
;   INT   21h                 ;        имя первого файла
 
   MOV   AH,4Fh               ; искать сл.файл
   MOV   DX,newDTA            ;
   INT   21h                  ;
   JC    error                ;
 
   MOV   AH,9                 ; выводим его имя на экран
   MOV   DX,newDTA+30         ;
   INT   21h                  ;
   JMP   exit                 ;
 
error:                        ; ошибка!
   MOV   AH,9                 ;
   MOV   DX,noFile            ;
   INT   21h                  ;
 
exit:
   XOR   AX,AX                ;
   INT   16h                  ;
   INT   20h                  ;
1
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 00:38  [ТС] 5
R71MT, странно... при попытке скомпилировать пишет: Operand types do not match
Assembler
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
.model tiny
.code
org 100h
 
JMP start
newDTA  DB  45 DUP('$')       ; область "DISK TRANSFER AREA"
fName   DB  '*.COM',0         ; ищем COM-файлы
noFile  DB  '<--- ERROR!$'    ;  
start:
   MOV   AH,1Ah               ; создать DTA
   MOV   DX,newDTA            ;<------ругается на эти строки
   INT   21h                  ;
 
   MOV   AH,4Eh               ; искать файл!
   MOV   CX,02h               ;
   MOV   DX,fName             ; маска для поиска<------
   INT   21h                  ;
   JC    error                ; ошибка?
 
;   MOV   AH,9                ; раскомментируй,
;   MOV   DX,newDTA+30        ;    если хочешь вывести,
;   INT   21h                 ;        имя первого файла
 
   MOV   AH,4Fh               ; искать сл.файл
   MOV   DX,newDTA            ;
   INT   21h                  ;
   JC    error                ;
 
   MOV   AH,9                 ; выводим его имя на экран
   MOV   DX,newDTA+30         ;
   INT   21h                  ;
   JMP   exit                 ;
 
error:                        ; ошибка!
   MOV   AH,9                 ;
   MOV   DX,noFile            ;<------
   INT   21h                  ;
 
exit:
   XOR   AX,AX                ;
   INT   16h                  ;
   INT   20h
 
 
end start
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 00:53  [ТС] 6
R71MT,
0
Миниатюры
Вывод названия второго файла в каталоге  
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,513
Записей в блоге: 5
17.01.2016, 01:35 7
Цитата Сообщение от Dialkord228 Посмотреть сообщение
;<------ругается на эти строки
..добавь OFFSET
1
17.01.2016, 01:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2016, 01:35

Копирование файла с выдачей предупреждающего сообщения о существовании такого файла в результирующем каталоге
копирование файла с выдачей предупреждающего сообщения о существовании такого файла в...

Как в начало каждой строки каждого текстового файла в текущем каталоге вставить имя этого же файла?
Здравствуйте, подскажите пожалуйста как в текущем каталоге, в начало каждой строки каждого...

Поиск в каталоге нужного файла и создание при его наличии нового файла с тем же именем, но с другим раширением
Нужно сделелать проверку на наличие файла &quot;Пример.т01&quot; в катологе D:\Temp\ и при условии что они...


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

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

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