Частота каждого персонажа - PullRequest
       25

Частота каждого персонажа

0 голосов
/ 13 октября 2018

Я пытаюсь посчитать количество символов в файле, я прочитал файл и сохранил его в массиве, я начал делать это только для одной буквы (а), затем я сделаю все остальное,Проблема, с которой я сталкиваюсь, - это когда я загружаю адрес массива и проверяю значение первого элемента в массиве, если это буква (а) или нет, если это не так, я перехожу на букву (б), в противном случае, еслизначение то же самое, я увеличиваю значение счетчика и перехожу к следующему адресу.

проблема в том, что я пробовал один способ, но он всегда сохраняет значение ($ t0) одинаковым (97),поэтому я попробовал другое решение, но оно не сработало

. Любые идеи или помощь будут оценены

.data

.align 2
A: .space 10000 # space for 10000 Char

file: .asciiz "input.txt"  # the txt file is in the same dirictory as MARS 
tool and the source code

error: .asciiz "File does not exist"


.text
.globl main

main:

la $t0, A
# Open file for reading

li   $v0, 13       # system call for open file
la   $a0, file      # input file name
li   $a1, 0           # flag for reading
li   $a2, 0        # mode is ignored
syscall               # open a file 
move $s6, $v0         # save the file descriptor 

bltz   $s6,noFile
# checking the value of $s6 if it saved values means the file exist if not 
there's not file
# if file is not found exit - Branch if $a0 is 0 which mean no data


# reading from file to Array (A)

li   $v0, 14        #  reading from file
move $a0, $s6       # file descriptor 
la   $a1, A    # address of buffer from which to read
li   $a2, 10000 
syscall             # read from file




  CountA:

 lb $t0 , 0($a1)

 bne $t0,'a', CountB
 addi $t1,$t1,1 #counter
 addi $a1,$a1,4 # to move to next address

 addi $t0,$t0,1 # to incr t0 to check for next char

 b CountA

 CountB:

 # not completed yet



 exit:
 # Close the file 
 li   $v0, 16       # system call for close file
 move $a0, $s0      # file descriptor to close
 syscall            # close file

 li $v0, 10    # Exit
 syscall

 noFile:            # if file is not found show message and exit

 li $v0, 4
 la $a0,error #load error msg
 syscall # print error msg

 li $v0, 10    # Exit
 syscall

образец файла input.txt

a
a
a
b
b
c
c
d
...