Несколько выходов с циклом for в Praat

У меня есть скрипт, в котором у меня есть несколько папок, каждая из которых содержит три аудиофайла с идентификатором #_1, ID#_2 и ID#_3. Пользователь может вводить строку разных идентификаторов, один за другим, а затем скрипт распознает разные идентификаторы и запускает код для каждого из них.

У меня для этого настроен цикл -

form Settings comment Enter the IDs of the different subjects sentence subjectIDs endform

numOfSubjects = length(subjectIDs$)/4

for i from 0 to (numOfSubjects - 1)
    subjectID$ = mid$(subjectIDs$, 1 + 4*i, 4 + 4*i)
    outFile$ = subjectID$ + "/SubjectResponseOnsets" + subjectID$ + ".txt"
    path$ = subjectID$ + "/" + subjectID$
    @firstOutput
    @secondOutput
    @thirdOutput'

Каждая из этих процедур определена ранее в коде, и они в основном выводят определенные диапазоны от аудиофайлов до текстового файла.

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

Цикл for, кажется, не работает хорошо, но код работает нормально при первом запуске.

Буду очень признателен за любую помощь!

1 ответ

Решение

Я не знаю, правильно ли я понял, что пытался сделать твой сценарий, так как вставленный тобой фрагмент был неполным. Лучше всего, если вы предоставите код, который является исполняемым как есть. В этом случае вы пропустили закрытие endfor и вы вызывали некоторые процедуры, которые не были определены в вашем фрагменте (даже в качестве заполнителей). Мне пришлось написать несколько фиктивных процедур, чтобы заставить его работать.

Так как вы также не сказали, как ваш сценарий вышел из строя, было неясно, что нужно исправить. Поэтому я попытался заставить его работать.

Это звучало так, как будто ваш код разделения идентификаторов доставлял вам некоторые проблемы. Я взял split процедура от utils плагин доступен через CPrAN, что облегчает ввод идентификаторов (полное раскрытие: я написал этот плагин).

form Settings
  comment Enter the IDs of the different subjects
  sentence subjectIDs 01 02 03
endform

@split: " ", subjectIDs$
numOfSubjects = split.length

for i to numOfSubjects
  subjectID$ = split.return$[i]
  path$ = subjectID$
  outFile$ = path$ + "/SubjectResponseOnsets" + subjectID$ + ".txt"

  # Make sure output directory exists
  createDirectory: path$

  @firstOutput
  @secondOutput
  @thirdOutput
endfor

procedure firstOutput ()
  appendFileLine: outFile$, "First"
endproc

procedure secondOutput ()
  appendFileLine: outFile$, "Second"
endproc

procedure thirdOutput ()
  appendFileLine: outFile$, "Third"
endproc

# split procedure from the utils CPrAN plugin
# http://cpran.net/plugins/utils
procedure split (.sep$, .str$)
  .seplen = length(.sep$)
  .length = 0
  repeat
    .strlen = length(.str$)
    .sep = index(.str$, .sep$)
    if .sep > 0
      .part$ = left$(.str$, .sep-1)
      .str$ = mid$(.str$, .sep+.seplen, .strlen)
    else
      .part$ = .str$
    endif
    .length = .length+1
    .return$[.length] = .part$
  until .sep = 0
endproc

Если это не то, с чем у вас проблемы, вам нужно быть более конкретным.

Другие вопросы по тегам