กระทู้เก่าบอร์ด อ.Yeadram
1,624 9
URL.หัวข้อ /
URL
ต้องการตรวจสอบไฟล์ วันที่ล่าสุด ครับ
หากต้องการตรวจสอบ Text ไฟล์ วันที่ล่าสุดที่ตามรูปแบบ ปีเดือนวัน
จากโฟลเดอร์หนึ่ง
ต.ย. เช่น D:\File ภายในมีชื่อไฟล์ดังนี้
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
จาก ต.ย. ต้องการตรวจสอบไฟล์ชื่อ xxx_20120829.txt ครับ
ต้องทำอย่างไร ขอบคุณครับ
จากโฟลเดอร์หนึ่ง
ต.ย. เช่น D:\File ภายในมีชื่อไฟล์ดังนี้
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
จาก ต.ย. ต้องการตรวจสอบไฟล์ชื่อ xxx_20120829.txt ครับ
ต้องทำอย่างไร ขอบคุณครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R13682
การเปรียบเทียบจะเปรียบเทียบอย่างไรครับ ยังคิดไม่ออกครับ
รบกวนคุณ PichiTC ช่วยอธิบายแนวทางหน่อยครับ
รบกวนคุณ PichiTC ช่วยอธิบายแนวทางหน่อยครับ
3 @R13695
หากผมต้องการเปรียบเทียบโดยเอาวันที่ล่าสุด เช่น
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
ถ้าผมใช้คำสั่ง mid เพื่อตัด String เอาเฉาพะตัวเลขผมจะใช้ฟังก์ชั่นอะไรในการหาค่าสูงสุดของวันที่ในตัวอย่างนี้ครับ
หากใช้ Dmax หรือพวกฟังก์ชั่นอื่นๆ มันต้องใช้กับฐานข้อมูล
ที่อยู่ใน Access ครับ ช่วยแนะนำหน่อยครับ ขอบคุณครับ
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
ถ้าผมใช้คำสั่ง mid เพื่อตัด String เอาเฉาพะตัวเลขผมจะใช้ฟังก์ชั่นอะไรในการหาค่าสูงสุดของวันที่ในตัวอย่างนี้ครับ
หากใช้ Dmax หรือพวกฟังก์ชั่นอื่นๆ มันต้องใช้กับฐานข้อมูล
ที่อยู่ใน Access ครับ ช่วยแนะนำหน่อยครับ ขอบคุณครับ
4 @R13699
วนลูปเทียบค่าทีละ file ครับ
Do While ...
...
If MaxFileDate < TempFileDate Then
MaxFileDate = TempFileDate
End If
...
Loop
Do While ...
...
If MaxFileDate < TempFileDate Then
MaxFileDate = TempFileDate
End If
...
Loop
5 @R13702
หากต้องการหาชื่อไฟล์ในโฟลเดอร์ที่ต้องการ ว่าไฟล์ไหนมีการอัพเดทล่าสุด ลองใช้ฟังก์ชั่นนี้ดูนะครับ แล้วลองทำเป็นขั้นตอนตามผม ดูว่าตรงตามความต้องการหรือไม่
1. สร้าง Module ขึ้นใหม่ ใส่โค๊ดนี้ลงไป
2. บนฟอร์ม สร้างปุ่มใหม่ขึ้นมา ใส่โค๊ดลงใน Event > On Click
- จากนั้นลองกดปุ่มที่สร้างดู เราจะได้ชื่อไฟล์ที่มีการอัพเดทล่าสุดในโฟลเดอร์ File เสมอ
- เมื่อได้ชื่อไฟล์อัพเดทล่าสุดมาแล้ว จะนำไปใช้อะไรต่อก็สามารถต่อยอดต่อไปได้แล้วครับ
ปล. วิธีนี้ไม่จำเป็นต้องตั้งชื่อไฟล์เป็นรูปแบบวันที่ จะเป็นไฟล์ชื่ออะไรก็ได้ เพราะเราใช้การเรียกดูข้อมูล Info ของไฟล์โดยตรง
1. สร้าง Module ขึ้นใหม่ ใส่โค๊ดนี้ลงไป
Public Function GetFileInfo(FileName As String, Optional fReturn As String) As String
On Error GoTo err_fInfo
Dim myFSO, myFileObject
Dim datLastModified As Date
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set myFileObject = myFSO.GetFile(FileName)
If fReturn = "" Then
With myFileObject
datLastModified = .dateLastModified
End With
GetFileInfo = datLastModified
Else
Dim vReturn As Variant
vReturn = myFileObject.dateLastModified
GetFileInfo = vReturn
End If
Exit_err:
Set myFileObject = Nothing
Set myFSO = Nothing
Exit Function
err_fInfo:
GetFileInfo = Err.Description
Resume Exit_err
End Function
2. บนฟอร์ม สร้างปุ่มใหม่ขึ้นมา ใส่โค๊ดลงใน Event > On Click
Dim Date_update As Date
Dim NameFileUpdate As String
Dim strFile As String
strFile = Dir("D:\File\", vbNormal)
Do While strFile <> ""
If IsNull(Date_update) Or Date_update < CDate(GetFileInfo("D:\File\" & strFile)) Then
Date_update = CDate(GetFileInfo("D:\File\" & strFile))
NameFileUpdate = strFile & Chr(13) & Date_update
End If
strFile = Dir()
Loop
MsgBox NameFileUpdate
- จากนั้นลองกดปุ่มที่สร้างดู เราจะได้ชื่อไฟล์ที่มีการอัพเดทล่าสุดในโฟลเดอร์ File เสมอ
- เมื่อได้ชื่อไฟล์อัพเดทล่าสุดมาแล้ว จะนำไปใช้อะไรต่อก็สามารถต่อยอดต่อไปได้แล้วครับ
ปล. วิธีนี้ไม่จำเป็นต้องตั้งชื่อไฟล์เป็นรูปแบบวันที่ จะเป็นไฟล์ชื่ออะไรก็ได้ เพราะเราใช้การเรียกดูข้อมูล Info ของไฟล์โดยตรง
6 @R13714
ใช้วิธีของคุณ TTT อาจจะตรวจสอบวันที่ข้อมูลจาก info ของไฟล์ได้โดยตรงก็จริงครับ แต่ผมคิดว่ายังไม่ตรงตามต้องการ เนื่องจาก ในโฟลเดอร์นี้มีหลายไฟล์ ดังนั้นข้อมูลจาก info ของไฟล์อาจจะล่าสุด แต่ไม่ใช่ไฟล์ที่ผมต้องการก็ได้
ความเห็นของผมคือ ผมอยากทราบวิธีสร้างฟังก์ชั่น ตรวจสอบ
จากชื่อไฟล์ที่ผมได้ตั้งไว้คือ
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
ผมตัดสตริงให้เหลือแค่
20120827
20120828
20120829
เพื่อสะดวกเวลาตรวจสอบวันที่ล่าสุดของไฟล์ครับ
แต่ผมติดปัญหาตรงที่จะหาค่าสูงสุดของตัวเลขเหล่านี้อย่างไรนั่นเอง
ผมไม่สามารถใช้ฟังก์ชั่นสำเร็จรูปใน Acess หาค่าได้ เนื่องจากมันไม่ได้อยู่ใน Database แต่อยู่ที่ D:\File
โค้ดที่ผมเขียนไว้ตรวจสอบไฟล์ใน Drive D:\File คือ
Dim Fso As Object
Dim intCount as Integer , intTotal as Integer
Dim xFolder As Object, xFile As Object
Set Fso = CreateObject("Scripting.FileSystemObject") 'Create Class system file object.
Set xFolder = Fso.GetFolder("D:\File)
For Each xFile In xFolder.Files
If Right(xFile, 3) = "txt" Then
intCount = intCount + 1
Debug.Print "No: " & intCount & " " & Left(Right(xFile, 12), 8)
End If
Next
intTotal = intCount
Debug.Print " Total: " & intTotal & vbNewLine
intCount = 0
ดังนั้นความคิดผมคือน่าจะเขียนฟังก์ชั่นหาค่า max จากตัวเลขเหล่านี้เองครับ ซึ่งผมยังคิดไม่ออกว่าจะเขียนอย่างไร
รบกวนหน่อยนะครับ ขอบคุณทุกท่านที่เข้ามาช่วยเหลือครับ
ความเห็นของผมคือ ผมอยากทราบวิธีสร้างฟังก์ชั่น ตรวจสอบ
จากชื่อไฟล์ที่ผมได้ตั้งไว้คือ
xxx_20120827.txt
xxx_20120828.txt
xxx_20120829.txt
ผมตัดสตริงให้เหลือแค่
20120827
20120828
20120829
เพื่อสะดวกเวลาตรวจสอบวันที่ล่าสุดของไฟล์ครับ
แต่ผมติดปัญหาตรงที่จะหาค่าสูงสุดของตัวเลขเหล่านี้อย่างไรนั่นเอง
ผมไม่สามารถใช้ฟังก์ชั่นสำเร็จรูปใน Acess หาค่าได้ เนื่องจากมันไม่ได้อยู่ใน Database แต่อยู่ที่ D:\File
โค้ดที่ผมเขียนไว้ตรวจสอบไฟล์ใน Drive D:\File คือ
Dim Fso As Object
Dim intCount as Integer , intTotal as Integer
Dim xFolder As Object, xFile As Object
Set Fso = CreateObject("Scripting.FileSystemObject") 'Create Class system file object.
Set xFolder = Fso.GetFolder("D:\File)
For Each xFile In xFolder.Files
If Right(xFile, 3) = "txt" Then
intCount = intCount + 1
Debug.Print "No: " & intCount & " " & Left(Right(xFile, 12), 8)
End If
Next
intTotal = intCount
Debug.Print " Total: " & intTotal & vbNewLine
intCount = 0
ดังนั้นความคิดผมคือน่าจะเขียนฟังก์ชั่นหาค่า max จากตัวเลขเหล่านี้เองครับ ซึ่งผมยังคิดไม่ออกว่าจะเขียนอย่างไร
รบกวนหน่อยนะครับ ขอบคุณทุกท่านที่เข้ามาช่วยเหลือครับ
7 @R13716
บนสมมุติฐานที่ format ของ ชื่อfile เป็น xxx_yyyymmdd.txt
Dim Fso As Object
Dim intCount as Integer , intTotal as Integer
Dim xFolder As Object, xFile As Object
Dim strMaxFile as String
Set Fso = CreateObject("Scripting.FileSystemObject") 'Create Class system file object.
Set xFolder = Fso.GetFolder("D:\File)
strMaxFile = ""
For Each xFile In xFolder.Files
If Right(xFile, 3) = "txt" Then
intCount = intCount + 1
Debug.Print "No: " & intCount & " " & Left(Right(xFile, 12), 8)
If xFile.Name > strMaxFile Then
strMaxFile = xFile.Name
End If
End If
Next
Debug.Print "Max File = " & strMaxFile
8 @R13718
คือถ้าคุณสามารถเขียนตัดคำโดยใช้การลูปได้แล้ว ก็แค่นำค่าที่ได้นั้นมาเปรียบเทียบตอนลูปเลยก็น่าจะได้แล้วนะครับ ยกตัวอย่างของคุณมาเพิ่มให้ดูนะครับ
ประมาณนี้ครับ คิดว่าคุณทำได้ขนาดนี้แล้ว ไม่น่ายากแล้วนะครับ
Dim Fso As Object
Dim intCount As Integer, intTotal As Integer
'------กำหนดตัวแปรสำหรับเก็บค่าสูงสุด-----
Dim DateMax As Long
'-------------------------------------------------------
Dim xFolder As Object, xFile As Object
DateMax = 0
Set Fso = CreateObject("Scripting.FileSystemObject") 'Create Class system file object.
Set xFolder = Fso.GetFolder("D:\File")
For Each xFile In xFolder.Files
If Right(xFile, 3) = "txt" Then
intCount = intCount + 1
MsgBox "No: " & intCount & " " & Left(Right(xFile, 12), 8)
'-----------------เพิ่มเงื่อนไขการเปรียบเทียบ-------------------
If DateMax < CLng(Left(Right(xFile, 12), 8)) Then
DateMax = CLng(Left(Right(xFile, 12), 8))
End If
'------------------------------------------------------------------------
End If
Next
intTotal = intCount
MsgBox " Total: " & intTotal & vbNewLine & "Last File: " & "xxx_" & DateMax & ".txt"
intCount = 0
Set Fso = Nothing
Set xFolder = Nothing
ประมาณนี้ครับ คิดว่าคุณทำได้ขนาดนี้แล้ว ไม่น่ายากแล้วนะครับ
9 @R13722
ขอบคุณ อ.ทั้งสองท่านครับ
แนวคิดง่ายๆ จากโค้ดที่แนะนำมา ซึ่งผมเองก็นึกไม่ถึงเลยคือ
สร้างตัวแปรเพื่อเก็บค่า Max ที่ส่งเข้ามาหากค่าไหนน้อยกว่าก็ไม่
ต้องเก็บลงตัวแปร แบบนี้ก็จะสามารถหาค่าสูงสุด ได้แล้ว
ขอบคุณมากครับ ทำให้ผมสามารถนำเอาไปประยุกต์เพื่อพัฒนา
โปรแแกรมได้อีกมากมายเลย ต้องขอบคุณบอร์ดแห่งนี้จริงๆ
แนวคิดง่ายๆ จากโค้ดที่แนะนำมา ซึ่งผมเองก็นึกไม่ถึงเลยคือ
สร้างตัวแปรเพื่อเก็บค่า Max ที่ส่งเข้ามาหากค่าไหนน้อยกว่าก็ไม่
ต้องเก็บลงตัวแปร แบบนี้ก็จะสามารถหาค่าสูงสุด ได้แล้ว
ขอบคุณมากครับ ทำให้ผมสามารถนำเอาไปประยุกต์เพื่อพัฒนา
โปรแแกรมได้อีกมากมายเลย ต้องขอบคุณบอร์ดแห่งนี้จริงๆ
Time: 0.2822s
วิธีใช้ Dir()
http://www.thai-access.com/yeadram_view.php?topic_id=2828