แสดงบทความที่มีป้ายกำกับ Batfile แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Batfile แสดงบทความทั้งหมด

วันจันทร์ที่ 18 มิถุนายน พ.ศ. 2555

ทำงานกับไฟล์เยอะๆ ด้วยคำสั่งเดียว (batch processing)


หากมีการทำงานเช่นการ แปลงระบบพิกัดของไฟล์ภาพหรือแผนที่จำนวนมาก และไม่อยากค่อยๆทำทีละไฟล์ไปเรื่อยๆ จนครบก็สามารถอาศัยวิธีการเดิมที่ใช้ในระบบ DOS หรือ  UNIX นั่นก็คือการใช้วิธีการ Batch processing คือสั่งครั้งเดียวให้ทำงานไปเรื่อยๆ จนครบ วิธีการแบบนี้ใช้กับคำสั่งแบบพิมพ์หรือ command line นะครับ

ตัวอย่าง เช่น เราต้องการแปลงระบบพิกัดไปเป็น ละติจูดลอนจิจูด ซึ่งข้อมูลมีระบบพิกัดเป็น UTM zone 47 , WGS84 ซึ่งในการแปลงระบบพิกัดเราอาศัย gdalwarp ใน FWTools คำสั่งคือ
>gdalwarp -t_srs epsg:4326 input.tif output.tif
เมื่อต้องการสั่งแบบทีเดียว ก็ต้องทำการจัดการข้อมูลในโฟล์ดเดอร์นั้นที่นามสกุล tif ให้เหลือเฉพาะข้อมูลที่ต้องการแปลงเท่านั้น ไม่งั้นไฟล์อื่นที่นามสกุลเดียวกันจะถูกแปลงไปด้วย คำสั่งมีดังนี้
>for %i in (.\*tif) do gdalwarp -t_srs epsg:4326 geo\%i
มีความหมายว่าใช้ gdalwarp แปลงระบบพิกัดให้เป็น ละติจูดลอนจิจูด แปลงแล้วให้เอาไปเก็บไว้ใต้โฟล์ดเดอร์geo โดยใช้ชื่อไฟล์เดิม
หากต้องการเติมอักษรต่อท้ายชื่อไฟล์เดิมเพื่อให้เห็นความแตกต่างเช่นต่อท้ายทุกไฟล์ด้วย _srs4326 สามารถทำได้ดังนี้
>for %i in (.\*tif) do gdalwarp -t_srs epsg:4326 geo\%i~_srs4326.tif

วันพุธที่ 22 มิถุนายน พ.ศ. 2554

VBA-Ms Access Create_Batfile


Function Create_Batfile()
Set fs = CreateObject("Scripting.FileSystemObject")
'Set a = fs.CreateTextFile("C:\Zr506\update.sql", True)
'a.writeline ("UPDATE  configuration SET last_date ='" & EngDate(Last_Date) & "';")
'a.Close
txtServer = "localhost"

Set a2 = fs.CreateTextFile("C:\Zr506\update.bat", True)
Set rsz = CurrentDb.OpenRecordset("SELECT * FROM disease ")
Do While Not rsz.EOF
codedz = rsz.Fields("codedz")
    a2.writeline ("" & Postgres_Path & "psql -d " & Postgres_DB & " -f C:\Zr506\sick_r506_" & codedz & ".sql  -U postgres  -h  " & txtServer & "")
    a2.writeline ("" & Postgres_Path & "psql -d " & Postgres_DB & " -f C:\Zr506\death_r506_" & codedz & ".sql  -U postgres  -h  " & txtServer & "")
   
rsz.MoveNext
Loop


a2.writeline ("" & Postgres_Path & "psql -d " & Postgres_DB & " -f C:\Zr506\update.sql -U postgres  -h  " & txtServer & "")
a2.Close
stAppName = "C:\Zr506\update.bat"  '¤Ø³µéͧà»ÅÕè¹ Drive áÅÐ Path ¤ÃѺ
Call Shell(stAppName, 3)
End Function