ปัญหาเหล่านั้นจะหมดไปเมื่อเรารู้จักคำสั่ง "eval()" ตอนไปนั่งอ่าน help ดูก็งงๆ เหมือนกันแปลไม่ค่อยภาษาอังกฤษไม่ค่อยจะแข็งแรง แต่พอดูตัวอย่างก็พอกล่อมแกล้มใช้งานได้
คำสั่ง eval ตามความเข้าใจของผมก็คือ เป็นคำสั่งที่ใช้ซ้อนคำสั่ง (โอ้ยแบบนี้งงงงงงง 555+) ผมพูดไม่ผิดครับคำสั่งซ้อนคำสั่งจริงๆ คือมันมีความสามารถที่จะแตกบรรทัดคำสั่งนั้นโดยเพิ่มลูกเล่นบางอย่างเข้าไปได้ อธิบายแบบนี้ก็คงงงๆ ดูตัวอย่างเลยดีกว่า
โดยผมมีโจทย์อยู่ว่า ผมจะรัน series ชื่อไฟล์โหลดเข้าไปใน series ของตัวแปรที่ต้องการ
เช่น
ผมมีไฟล์
xSeries1.xlsx
xSeries2.xlsx
xSeries3.xlsx
xSeries4.xlsx
xSeries5.xlsx
แล้วต้องการใส่ในตัวแปร mSeries1 ไปจนถึง mSeries5
วิธีบ้านๆ เลยก็คือใช้
mSeries1=xlsread('xSeries1.xlsx');
mSeries2=xlsread('xSeries2.xlsx');
mSeries3=xlsread('xSeries3.xlsx');
mSeries4=xlsread('xSeries4.xlsx');
mSeries5=xlsread('xSeries5.xlsx');
ดูๆ แล้วก็ไม่ได้ยาก และไม่ได้ยาวจนเกินไป
แล้วลองจินตนาการดูสิว่าถ้าเกิดมีสัก 100 ไฟล์หละ หุหุ ยาวเป็นวาเลย
งั้นลองมาดูตัวช่วยของเรากัน คือ eval
for n=1:5
eval(['mSeries',int2str(n),'=xlsread(''xSeries''',int2str(n),'.xlsx)'])
end
เหลือแค่ 3 บรรทัดเอง ง่ายม่ะ ทีนี้ถ้าเกิดมี 100 ไฟล์ ก็ใช้แค่ 3 บรรทัด
แต่งงอะดิว่า ใส่ไรเข้าไปมั่ง
มาดูวิธีการใส่เป็นขั้นตอนกันหลงทางดีกว่า
ตอนแรกเรามี
mSeries1=xlsread('xSeries1.xlsx');
ใส่คำสั่่ง eval(['']) ก่อนเลย ได้เป็น
eval(['mSeries1=xlsread('xSeries1.xlsx');'])
ทีนี้ตรงไหนที่มี ' ใส่เพิ่มไปอีกตัวเลย เป็น '' ก็จะได้
eval(['mSeries1=xlsread(''xSeries1.xlsx'');'])
ต่อมาใส่ ลูปเลยก็จะได้
for n=1:5
eval(['mSeries1=xlsread(''xSeries1.xlsx'');'])
end
ตรงนี้เป็นเทคนิคกันหลงของผมเอง ตรงไหนที่จะให้มันหมุนวนผมจะใส่ ', ,' คั่นรอไว้ก่อน ไม่งั้น มันจะลายตามากๆ แล้วก็ตามด้วย ตัวแปรที่จะหมุน ก็จะใส่ประมาณนี้ ',ตัวแปรที่หมุน,' โดยข้อแม้ของ eval มันจะต้องเป็น str ทั้งบรรทัด ถ้าเกิดเอาตัวแปร n มาหมุนเลย มันจะหมุนไม่ได้ ต้องแปลงเป็น str ก่อนโดยใช้คำสั่ง int2str ก็จะได้เป็น
for n=1:5
eval(['mSeries',int2str(n),'=xlsread(''xSeries',int2str(n),'.xlsx'');'])
end
เป็นอันเสร็จสิ้นกระบวนการ
ตรงนี้สามารถดัดแปลงได้เพียบ เช่นเอา array มาหมุนบ้าง เอาตำแหน่งไฟล์มาหมุนบ้าง
ไม่มีความคิดเห็น:
แสดงความคิดเห็น