Выделение пути из строки

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 15 июл 2009.

  1. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    имелось в виду, конечно "\" и "/"

    т.е. расширение всё же есть?

    получается, что путь всегда содержить имя файла программы с расширением?

    в таком случае можно двигаться с конца строки к началу, в поисках:
    * кавычек
    * точки
    * символов-разделителей "\" и "/"


    Отредактировано Jupiter (Сегодня 88:88:88)
     
  2. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Я так и делаю. Алгоритм, как я уже писал, понятен. Просто хотел узнать может есть готовые решения.
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Код (Text):
    1. proc ScanDecimalStr buffer
    2.      push       eax
    3.      push       esi
    4.      pushf
    5.      cld
    6.      mov        esi, [buffer]
    7.      xor        ecx, ecx
    8.    local
    9.    .str_find_decimal:
    10.      lodsb
    11.      cmp        al, '\'
    12.      je         .ok_separator
    13.      cmp        al, '/'
    14.      je         .ok_separator
    15.      cmp        al, 0
    16.      je         .end_find
    17.      jmp        .str_find_decimal
    18.    local
    19.    .ok_separator:
    20.      add        ecx, 1
    21.      jmp        .str_find_decimal
    22.    local
    23.    .end_find:
    24.      popf
    25.      pop        esi
    26.      pop        eax
    27.      ret
    28. endp
    29.  
    30. proc ExtractFileDrive buffer, path
    31.      push       eax
    32.      push       esi
    33.      push       edi
    34.      push       ecx
    35.      pushf
    36.      cld
    37.      mov        esi,[path]
    38.      mov        edi,[buffer]
    39.      mov        ecx, 3
    40.      rep        movsb
    41.      mov        al,0
    42.      stosb
    43.      popf
    44.      pop        ecx
    45.      pop        edi
    46.      pop        esi
    47.      pop        eax
    48.      ret
    49. endp
    50.  
    51. proc ExtractFilePath buffer, path
    52.      push       eax
    53.      push       ecx
    54.      push       esi
    55.      push       edi
    56.      pushf
    57.      stdcall    ScanDecimalStr, [path]
    58.    local
    59.    extract_of_str:
    60.      cld
    61.      mov        esi, [path]
    62.      mov        edi, [buffer]
    63.    local
    64.    extract_path:
    65.      lodsb
    66.      cmp        al, '\'
    67.      je         dec_str
    68.      cmp        al, '/'
    69.      je         dec_str
    70.      cmp        ecx, 0
    71.      je         end_of_str
    72.      stosb
    73.      jmp        extract_path
    74.    local
    75.    dec_str:
    76.      stosb
    77.      sub        ecx, 1
    78.      jmp        extract_path
    79.    local
    80.    end_of_str:
    81.      mov        al, 0
    82.      stosb
    83.      popf
    84.      pop        edi
    85.      pop        esi
    86.      pop        ecx
    87.      pop        eax
    88.      ret
    89. endp
    90.  
    91. proc ExtractFileName buffer, path
    92.  
    93.      push       eax
    94.      push       ecx
    95.      push       esi
    96.      push       edi
    97.      pushf
    98.      stdcall    ScanDecimalStr, [path]
    99.    local
    100.    .extract_of_str:
    101.      cld
    102.      mov        esi, [path]
    103.      mov        edi, [buffer]
    104.    local
    105.    .extract_path:
    106.      lodsb
    107.      cmp        al, '\'
    108.      je         .dec_str
    109.      cmp        al, '/'
    110.      je         .dec_str
    111.      cmp        ecx, 0
    112.      je         .extract_name
    113.      jmp        .extract_path
    114.    local
    115.    .extract_name:
    116.      stosb
    117.      lodsb
    118.      cmp        al, 0
    119.      je         .end_of_str
    120.      jmp        .extract_name
    121.    local
    122.    .dec_str:
    123.      sub        ecx, 1
    124.      jmp        .extract_path
    125.    local
    126.    .end_of_str:
    127.      mov        al, 0
    128.      stosb
    129.      popf
    130.      pop        edi
    131.      pop        esi
    132.      pop        ecx
    133.      pop        eax
    134.      ret
    135. endp
    136.  
    137. proc ExtractFileExt buffer, path
    138.      push       eax
    139.      push       ecx
    140.      push       esi
    141.      push       edi
    142.      pushf
    143.      stdcall    ScanDecimalStr,[path]
    144.      cld
    145.      mov        esi,[path]
    146.      mov        edi,[buffer]
    147.    local
    148.    .extract_ext_str:
    149.      lodsb
    150.      cmp        al, 0
    151.      je         .ok_extract
    152.      cmp        al, '\'
    153.      je         .dec_decimal
    154.      cmp        al, '/'
    155.      je         .dec_decimal
    156.      cmp        al, '.'
    157.      je         .find_ok_ext
    158.      jmp        .extract_ext_str
    159.    local
    160.    .find_ok_ext:
    161.      stosb
    162.      lodsb
    163.      cmp        al, 0
    164.      je         .ok_extract
    165.      jmp        .find_ok_ext
    166.    local
    167.    .dec_decimal:
    168.      sub        ecx, 1
    169.      jmp        .extract_ext_str
    170.    local
    171.    .ok_extract:
    172.      mov        al, 0
    173.      stosb
    174.      popf
    175.      pop        edi
    176.      pop        esi
    177.      pop        ecx
    178.      pop        eax
    179.      ret
    180. endp
    181.  
    182. proc LowerEngString string
    183.         push    esi edi eax
    184.         cld
    185.         mov     esi, [string]
    186.         mov     edi, [string]
    187.      .lower_loop:
    188.         lodsb
    189.         cmp     al, 0
    190.         je      .end_loop
    191.         cmp     al, 65
    192.         jge     .unset_upper
    193.      .stos_char:
    194.         stosb
    195.         jmp     .lower_loop
    196.      .unset_upper:
    197.         cmp     al, 90
    198.         jg      .stos_char
    199.         add     al, 32
    200.         stosb
    201.         jmp     .lower_loop
    202.      .end_loop:
    203.         stosb
    204.         pop     eax edi esi
    205.         ret
    206. endp
    и не парьтесь, смысл думаю понятен...
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    SPA
    не расстраивайтесь, это периодическая миграция видов обитателей сайтов букварной культуры в связи с прохождением очередного цикла развития :lol: