Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31

Проверить, есть ли этот текст полным путем к файлу в формате «с:\abc\def»

19.12.2011, 14:03. Показов 1629. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи с заданием.

Ввести строку текста. Проверить, есть ли этот текст полным путем к файлу в формате «с:\abc\def». Если есть, то напечатать сообщение: "Это полный путь к файлу" в другом случае "Это не полный путь к файлу".

Спасибо.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2011, 14:03
Ответы с готовыми решениями:

Выделить из строки с полным путем к файлу только имя файла
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой...

Выделить из строки с полным путем к файлу само имя файла без расширения
String58. Дана строка, содержащая полное имя файла, то есть имя диска, спи-сок каталогов (путь), собственно имя и расширение. Выделить из...

Есть ли в Qt аналог DEF файлу для списка экспортных функций?
в студии под Windows можно добавить def файл со списком экспортный функций и не заморачиваться с экспортами их в самом коде, например: ...

10
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.12.2011, 15:23
https://www.cyberforum.ru/post2074183.html
0
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31
19.12.2011, 16:41  [ТС]
Переделал задачу из заданого примера, вот что получилось. Но работает только для одного варианта "c:\abc\def". Нужна универсальность для любого пути.
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
.model  small
.stack  100h
.data
    string db 80 dup(?)
    promt db 0Dh,0Ah,'Shlyah do faily: $'
    all2 db 0Dh,0Ah,'Ce ne povnui shlyah do faily!$'
    ok db 0Dh,0Ah,'Ce povnui shlyah do faily!$'
    password db 'с:\abc\def$'
    pass_len dw 9
.code 
    mov ax,@data
    mov ds,ax       
@beg1:
    mov     ah,09h  
    mov     dx,offset promt 
    inc     dx
    int     21h
                
    mov     bx,0        
    lea si, string
@pass:
    mov     ah,08h  
    int     21h
    cmp     al,13       
    je  @compare    
    mov     [si],al
    mov ah,02
    mov     dl,[si]         
    int     21h
    inc     si
    jmp     @pass   
                
@compare:
    push    ds      
    pop     es
    lea     si,string   
    inc     si
    lea     di,password     
    inc     di
    cld             
    mov     cx,pass_len     
    repe    cmpsb   
                
    jne     @err        
                
    mov     ah,09h
    mov     dx,offset OK
    inc     dx
    int     21h
    jmp     @end1
@err:
    jmp     @end2   
@end1:
    ;mov    ah,09h
    ;mov    dx,offset All
    ;inc    dx
    ;int    21h
    ;jmp    @beg1
    MOV     AH,4ch  
    INT     21h         
@end2:
    mov     ah,09h
    mov     dx,offset All2
    inc     dx
    int     21h
    ;jmp    @beg1
    MOV     AH,4ch  
    INT     21h         
 
end
А вот сам пример с которого я переделал. Это задача на ввод и проверку пароля:
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
.model  small
.stack  100h
.data
    string db 80 dup(?)
    promt db 0Dh,0Ah,'Enter password: $'
    all db 0Dh,0Ah,'That is all$'
    ok db 0Dh,0Ah,'Working!!! $'
    password db 'pass$'
    pass_len dw 3
.code 
    mov ax,@data
    mov ds,ax       
@beg1:
    mov     ah,09h  
    mov     dx,offset promt 
    inc     dx
    int     21h
                
    mov     bx,0        
    lea si, string
@pass:
    mov     ah,08h  
    int     21h
    cmp     al,13       
    je  @compare    
    mov     [si],al
    mov ah,02
    mov     dl,'*'      
    int     21h
    inc     si
    jump    @pass   
                
@compare:
    push    ds      
    pop     es
    lea     si,string   
    inc     si
    lea     di,password     
    inc     di
    cld             
    mov     cx,pass_len     
    repe    cmpsb   
                
    jne     @err        
                
    mov     ah,09h
    mov     dx,offset OK
    inc     dx
    int     21h
    jump    @end1
@err:
    jump    @beg1   
@end1:
    mov     ah,09h
    mov     dx,offset All
    inc     dx
    int     21h
    jmp     @beg1
    MOV     AH,4ch  
    INT     21h         
 
end
Добавлено через 56 минут
Методом попыток и неудач написал еще один код, с того же примера. Теперь работает для всех вариантов, но проверка идет через каждый символ " \ ", а нужно чтобы в начале оно проверило " :\ ". Тоесть, моя програма проверяет только " c\abc\def ", a " c:\abc\def" она уже считает как не правильный вариант. Помогите.

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
.model  small
.stack  100h
.data
    string db 80 dup(?)
    promt db 0Dh,0Ah,'Enter path: $'
    error db 0Dh,0Ah,'Incorrect path$'
    ok    db 0Dh,0Ah,'Correct path$'
    password db '*\***\***$'
    pass_len dw 8
.code 
    mov ax,@data
    mov ds,ax       
@beg1:
    mov     ah,09h  
    mov     dx,offset promt
    inc     dx
    int     21h
                
    mov     bx,0        
    lea si, string
@pass:
    mov     ah,01h  
    int     21h
    cmp     al,13       
    je  @compare    
    ;cmp    al, '-'
    ;jne     
    CALL CMP2
    mov     [si],al
    inc     si
    jmp     @pass   
 
CMP2   PROC
    cmp al, '\'
    jne     @replace
    RET 
@replace:
    mov al, '*'
    RET
CMP2   ENDP 
@compare:
    push    ds      
    pop     es
    lea     si,string   
    inc     si
    lea     di,password     
    inc     di
    cld             
    mov     cx,pass_len     
    repe    cmpsb   
                
    jne     @err        
                
    jmp     @end1
@err:
    mov     ah,09h
    mov     dx,offset error
    inc     dx
    int     21h
    jmp     @beg1   
@end1:
    mov     ah,09h
    mov     dx,offset ok
    int     21h
    sub     AX,AX      
    int     16h      
    MOV     AH,4ch   
    INT     21h    
end
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.12.2011, 18:42
Гм. Если я правильно понял:
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
.386c
.model small
.stack  256
_text_  segment para public use16
    assume  cs:_text_, ds:_data_, es:_data_
    
start:  
    mov ax, seg _data_
    mov ds, ax
    mov es, ax
    mov ah, 19h
    int 21h         ; get current drive
    add al, 41h         ; convert to drive leter
    mov cdrv, al        ; save in path prefix
    mov dl, 0
    mov ah, 47h
    lea si, PWD
    int 21h             ; Get current directory
; Вывод на экран 
    mov     ah, 09h
    lea     dx, req
    int     21h             ; print herald
; ввод строки
    mov ah, 0Ah
    lea dx, inpbuf
    int 21h             ; read path string
;;
; prepare for convert
    mov si, dx
    lodsw
    shr ax, 8
    test    al,al
    jz  exit        ; no input? quit
    mov bx, ax
    lea bx,[si+bx]
    mov [bx],ah     ; zero at <EOL>
    lea dx, buf
; check for path validity
    mov ah, 3Bh 
    int 21h         ; attempt to change dir
    pushf           ; save flags for later
    push    dx
    mov di,dx   
;
    lea dx, cdrv
    mov ah, 3Bh
    int 21h     ; restore our previously saved dir
;
    mov cx,-1
    xor ax,ax
    repne   scasb
; добавляем '$' в хвост строки
    mov byte ptr [di-1],'$'
 
; новая строка
    mov     ah, 09h
    lea     dx, crlf
    int     21h     ; print 
    pop dx
    int 21h             ; print entered path
; Вывод на экран 
    popf                    ; test for result of CHDIR function
    jnc @@2             ; dir path valid & exist
    lea dx, _not_
    int 21h
@@2:
    lea dx, vld
    int 21h
 
; выход
exit:
    mov ah, 4Ch
    int 21h
_text_  ends
_data_  segment para use16 
crlf    db  0Dh,0Ah,'Path: $'
_not_   db  ' NOT$'
vld db  ' valid.$'
req db  'Enter path:$'
cdrv    db  ?,':\'
PWD db  64 dup(?)
inpbuf  db  255         ; наибольшая длина строки
len db  ?                       ; сюда вернется настоящая длина
buf db  255 dup(?)              ; тут будет то, что ввели
_data_  ends
    end start
1
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31
22.12.2011, 14:00  [ТС]
Вроде правильно, но путь c:\abc\def , Ваша программа считает неполным.

Добавлено через 1 минуту
Проверил, првильный вариант только один - с:\
А должно работать для всех вариаций.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
22.12.2011, 14:24
Гм. На снапшоте K:\USR\LOCAL\ETC\ - сетевой диск FreeBSD.
Миниатюры
Проверить, есть ли этот текст полным путем к файлу в формате «с:\abc\def»  
1
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31
22.12.2011, 14:42  [ТС]
Да, это так, но Вы не поняли суть задачи. Она состоит не в том, чтобы проверить правильность пути к файлу на ЖД, она просто должна проверять сам синтаксис написания пути. Тоесть, задача не настолько сложна, как Вы её поняли.

Последний код, который я написал, проверяет правильность, но только по одному знаку "\", но в пути есть ещё и ":". Тоесть, нужно просто поправить мой код, чтобы он проверял ещё и ":". Вся сложность для меня была именно в этом.

Добавлено через 6 минут
Ну и + проверка на то, что название логического диска не может содержать цифры.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
22.12.2011, 14:54
Цитата Сообщение от ksheminskiy
Тоесть, задача не настолько сложна
"Опять я не замечен с мавзолея" © Вишневский.
Для этого есть INT 21h/AH=60h
INT 21 60-- - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
Category: D - DOS kernel

Inp.:
AH = 60h
DS:SI -> ASCIZ filename or path
ES:DI -> 128-byte buffer for canonicalized name
Return: CF set on error
AX = error code
02h invalid component in directory path or drive letter only
03h malformed path or invalid drive letter
ES:DI buffer unchanged
CF clear if successful
AH = 00h or 3Ah (DOS 6.1/6.2 for character device)
AL = destroyed (00h or 2Fh or 5Ch or last character of current
directory on drive)

buffer filled with qualified name of form D:\PATH\FILE.EXT or
\\MACHINE\PATH\FILE.EXT
Desc: determine the canonical name of the specified filename or path,
corresponding to the undocumented TRUENAME command in COMMAND.COM
Notes: the input path need not actually exist
letters are uppercased, forward slashes converted to backslashes,
asterisks converted to appropriate number of question marks, and
file and directory names are truncated to 8.3 if necessary.
1
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31
22.12.2011, 14:58  [ТС]
Не могу понять как оно должно быть на самом деле. Можно поподробнее?
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
22.12.2011, 15:32
Дык,
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
.386c
.model small
.stack  256
_text_  segment para public use16
    assume  cs:_text_, ds:_data_, es:_data_
    
start:  
    mov ax, seg _data_
    mov ds, ax
    mov es, ax
; Вывод на экран 
    mov     ah, 09h
    lea     dx, req
    int     21h             ; print herald
; ввод строки
    mov ah, 0Ah
    lea dx, inpbuf
    int 21h             ; read path string
;;
; prepare for convert
    mov si, dx
    lodsw
    shr ax, 8
    test    al,al
    jz  exit        ; no input? quit
    mov bx, ax
    lea bx,[si+bx]
    mov [bx],ah     ; zero at <EOL>
    lea si, buf
    lea di, truepath
; check for path validity
    mov ah, 60h 
    int 21h         ; check path syntax
 
    pushf           ; save flags for later
    push    si
    mov di,si
    mov cx,-1
    xor ax,ax
    repne   scasb
; добавляем '$' в хвост строки
    mov byte ptr [di-1],'$'
 
; новая строка
    mov     ah, 09h
    lea     dx, crlf
    int     21h     ; print 
    pop dx
    int 21h             ; print entered path
; Вывод на экран 
    popf                    ; test for result of TRUENAME function
    jnc @@2             ; dir path valid & exist
    lea dx, _not_
    int 21h
@@2:
    lea dx, vld
    int 21h
; ну и здесь можно truepath вывести
; выход
exit:
    mov ah, 4Ch
    int 21h
_text_  ends
_data_  segment para use16 
crlf    db  0Dh,0Ah,'Path syntax: $'
_not_   db  ' NOT$'
vld db  ' valid.$'
req db  'Enter path:$'
;cdrv   db  ?,':\'
;PWD    db  64 dup(?)
inpbuf  db  255         ; наибольшая длина строки
len db  ?                       ; сюда вернется настоящая длина
buf db  255 dup(?)              ; тут будет то, что ввели
truepath db 255 dup(?)
_data_  ends
    end start
1
 Аватар для ksheminskiy
2 / 2 / 0
Регистрация: 03.03.2011
Сообщений: 31
22.12.2011, 16:02  [ТС]
Все работает отлично, спасибо. А можете подсказать как дописать вторую проверку в моем коде, так, для общего развития?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2011, 16:02
Помогаю со студенческими работами здесь

Работа с путем к файлу в формате unc
Здравствуйте! Подскажите, как работать с файлами, имея путь формата unc. Т.е. с ним можно работать так же, как и с обычным вида...

Проверить является ли строка путем к файлу
Подскажите как это сделать


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru