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

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

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

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, похоже, не работает, но код работает нормально при первом запуске.

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


person Fancyvase    schedule 02.04.2015    source источник


Ответы (1)


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

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

Похоже, что код разделения идентификатора доставлял вам некоторые проблемы. Я взял split процедуру из _ 3_, доступный через 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

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

person jja    schedule 03.04.2015
comment
Большое спасибо! Я дал очень расплывчатый вопрос, потому что не весь код был моим, поэтому я старался не публиковать его в Интернете. Однако ваш код и ваша процедура разделения (за которую я буду отдавать вам должное) помогли мне разобраться в этом! - person Fancyvase; 07.04.2015
comment
@Fancyvase Рад слышать. Если это ответило на ваш вопрос, рассмотрите возможность голосования и отметьте его как принятый ответ. Это помогает другим узнать о качестве и применимости ответа. - person jja; 07.04.2015