Importing and Editing a text file using strrep and user inputs

1 次查看(过去 30 天)
I have a text file called EXP1_SQ1_Template.txt, that has 8 lines. it looks like this:
LOAD BOX 1 SUBJ M1_299633_D295158_JUN19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat1 GROUP 1 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbi (x)
LOAD BOX 2 SUBJ M2_297928_D294277_APR19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat2 GROUP 2 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbi (x)
LOAD BOX 3 SUBJ M3_299632_D295158_JUN19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat3 GROUP 1 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbii (x)
LOAD BOX 4 SUBJ M4_297929_D294277_APR19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat4 GROUP 2 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbii (x)
LOAD BOX 5 SUBJ F5_299621_D295158_JUN19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat5 GROUP 1 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbi (x)
LOAD BOX 6 SUBJ F6_297923_D294277_APR19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat6 GROUP 2 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbi (x)
LOAD BOX 7 SUBJ F7_299626_D295158_JUN19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat7 GROUP 1 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbii (x)
LOAD BOX 8 SUBJ F8_297924_D294277_APR19@1910_Aut_ERROR2 EXPT St(m)_Se(n)_Rat8 GROUP 2 PROGRAM 1908_SIP_EPHYS_ERROR2_St3_TrainWZ_Cbii (x)
note the variables in (). I want a user to edit those, with user input. to that end, I wrote a code that is supposed to import this file, and then replace the strings.
here is the code:
Mac_Templ = importdata('EXP1_SQ1_Template.txt')
user_input_stage = input('Enter correct Stage: ');
Stage_Correction = strrep(Mac_Data, '(m)', user_input_stage);
user_input_session = input('Enter correct Session: ');
Session_Correction = strrep(Mac_Templ, '(n)', user_input_session);
user_input_list = input('Enter correct List: ');
List_Correction = strrep(Mac_Data, '(x)', user_input_list);
nothing is working as the Mac_Templ variable is saving the string "Exp1_SQ1_Template.txt". I am not sure what I am doing wrong. using
Exist('EXP1_SQ1_Template.txt')
returns a 2. thanks for the help

采纳的回答

avram alter
avram alter 2019-12-4
I found the answer, here is the corrected code:
clear
Mac_Templ = importdata('EXP1_SQ1_Template.txt');
user_input_stage = input('Enter correct Stage: ','s');
todaysMac = Mac_Templ;
todaysMac = strrep(todaysMac, '(m)', user_input_stage);
user_input_session = input('Enter correct Session: ','s');
todaysMac = strrep(todaysMac, '(n)', user_input_session);
user_input_list = input('Enter correct List: ','s');
todaysMac = strrep(todaysMac, '(x)', user_input_list);

更多回答(1 个)

Walter Roberson
Walter Roberson 2019-12-4
编辑:Walter Roberson 2019-12-5
Stage_Correction = strrep(Mac_Data, '(m)', user_input_stage);
Mac_Data does not exist in your code at that point.
Your replacements are either working with the undefined Mac_Data or with the original Mac_Templ rather than you modifying the string produced by the previous replacement.
user_input_stage = input('Enter correct Stage: ');
The user would have to know to enter quote marks around the text they input. I would suggest that using the 's' option to input() would make sense. Or using inputdlg() to ask all three questions at once.
Have you considered using regexprep() ?
regexprep(Mac_Templ, {'\(m\)', '\(n\)', '\(x\)'}, {user_input_stage, user_input_session, user_input_list})
Note that the ( and ) have to be escaped in this context, as () around a pattern means "grouping" in regexprep.
  1 个评论
avram alter
avram alter 2019-12-4
using 's' is exactly what fixed it, as well as properly importing it using importdata. I've never seen regexprep before, thats why I haven't used it.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

产品


版本

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by