Чтение случайной строки из файла в сборке x86 - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь прочитать из текстового файла, содержащего 500 слов, в сборке masm x86, задача состоит в том, чтобы случайно выбрать 8 слов оттуда.Может кто-нибудь подсказать, пожалуйста, как это сделать?

Это код для чтения из файла и его отображения на консоли.

;READING FROM THE FILE
      invoke CreateFileA,offset filepath,1,0,0,3,128,0
      invoke ReadFile,eax, offset buffer,lengthof buffer, offset x,0

;DISPLAYING CONTENT OF BUFFER ON CONSOLE
      invoke GetstdHandle,-11
      invoke WriteConsoleA,eax, offset buffer, lengthof buffer, offset x,0

Вот несколько слов из этого файла:

1.  abacus
2.  abacuses
3.  abaft
4.  abalone
5.  abalones
6.  abandon
7.  abandoned
8.  abandonedly
9.  abandonee
10. abandoner
11. abandoners
12. abandoning
13. abandonment
14. abandonments
15. abandons
16. abase
17. abased
18. abasedly
19. abasement
20. abaser
21. abasers
22. abases
23. abash
24. abashed
25. abashedly
26. abashes
27. abashing
28. abashment
29. abashments
30. abasing
31. abatable
32. abate
33. abated
34. abatement
35. abatements
36. abater
37. abaters
38. abates
39. abating
40. abatis
41. abatises
42. abator
43. abattoir
44. abattoirs
45. abbacies
46. abbacy
47. abbatial
48. abbe
49. abbes
50. abbess

1 Ответ

0 голосов
/ 17 мая 2018

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

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

Вот псевдокод для соответствующего алгоритма R , как вы, возможно, захотите его реализовать:

Algorithm to pick k lines at random from file f:
    Let A be an array holding j lines.
    Read the first k lines from f and store them in A.
    Until f is empty:
        Read a line from f and let i be the number of lines you read so far.
        Pick a random number j between 1 and i inclusive.
        If j <= k then assign the line you just read to A[j].
    Return the lines in A.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...