So, I have some code to write text to a file. This file will keep preferences for another script.
Here’s what I have:
on WriteFile(theData, TargetFile, theAppendBool)
try
set the TargetFile to the TargetFile as text
set the openTargetFile to ¬
open for access file TargetFile with write permission
if theAppendBool is false then ¬
set eof of the openTargetFile to 0
write theData to the openTargetFile starting at eof
close access the openTargetFile
return true
on error
try
close access file TargetFile
end try
return false
end try
end WriteFile
WriteFile( ("Name" & return & "Ralph" & "return" & Nickname & "Ralphus"), (pref_folder & ":" & "prefs.txt", false)
This works just fine. I get a file called prefs.txt with the text I wrote in the specified directory. Now I would like to parse the same file with something like this:
set theLines to paragraphs of (read alias (pref_folder & ":prefs.txt"))
repeat with tLine in theLines
if tLine is equal to "Name" then
display dialog "Found name!"
end if
end repeat
I can include an open statement here, and it opens the file–that is not the issues. This however never enters the true component of the if statement. I have tried just about all forms of casting tLine and doing string comparisons to no avail.
I made a quick text document with the same contents as what you’re writing and this worked for reading it back
set filepath to (path to desktop as Unicode text) & "test.txt"
set fileRef to (open for access file filepath)
set thefile to read fileRef
set para to paragraphs of thefile
repeat with i from 1 to (count of items of para)
if item i of para is "Name" then
display dialog "name found"
end if
end repeat
close access fileRef
EDIT: myndcraft posted first - while I was hunting and pecking.
This should work:
set theLines to paragraphs of (read alias (pref_folder & ":prefs.txt"))
repeat with tLine in theLines
set tLine to tLine as string
if tLine is equal to "Name" then
display dialog "Found Name!"
end if
end repeat
Alright–thanks for the help thus far. I actually tried making the file–instead of having it produced by applescript, and the reading works. It must be a problem with writing. Interesting enough, when I open the files written with TextMate, they appear with spaces (ie Name becomes N a m e). However, they look fine in text edit.
May be mising some functionality you want (which you can add), but this works
set filePath to (path to desktop as Unicode text) & "test.txt"
set LineWrite to ("Name" & return & "Ralph" & return & "Nickname" & return & "Ralphus")
WriteFile(LineWrite, filePath)
on WriteFile(LineWrite, filePath)
set fileRef to (open for access file filePath with write permission)
write LineWrite to fileRef
close access fileRef
end WriteFile
For the sake of my own sanity, lol, can you post the exact read & write scripts your using at the moment? The only thing I can think of is you’ve changed the write line or something slightly and thats why the results are coming back wrong.
The original problem here, ralphus, was that in the x in y form of repeat loop, x is actually a reference. While the repeat with x from 1 to (count y) form works fine, you could also simply extract the reference’s contents:
if tLine's contents is "Name" then
Looks like theData’s class might actually be Unicode text - in which case, in your read routine, try replacing:
set theLines to paragraphs of (read alias (pref_folder & ":prefs.txt"))
… with:
set theLines to paragraphs of (read alias (pref_folder & ":prefs.txt") as Unicode text)
However, I can’t see any reason why myndcraft’s write handler doesn’t work for you - since reading the file works fine here, too. (You could slip in a ‘set eof fileRef to 0’ statement after the ‘open for access’ statement - but that shouldn’t make a difference if the file was newly created in the first place…)