Vad innehåller en tom rad? ingenting?
if not strLine = "" then
' fooo
end if
Du kan använda on error resume next för att strunta i alla fel som inträffar.
mvh
12 svar · 602 visningar · startad av devotion
Hej :)
Har fljande finfina kod som läser in en textfil till databas:
dim objConn, objRS, strLine, iEnumber, strCategory, strUnit, curPrice, strSQL, intCounter
intCounter = 0
set objFSO = Server.CreateObject("Scripting.Filesystemobject")
set objFile = objFSO.OpenTextFile (Server.MapPath("\prislistor\Ahlsellpris.txt"))
Set objConn = Server.CreateObject("ADODB.Connection")
ObjConn.Open = "DSN=uppdragNu"
while not objFile.atendofstream
intCounter = intCounter +1
strLine = objFile.ReadLine
iEnumber = Replace(Trim(Mid(strLine, 1, 8)), "'", "''")
strArticlename = Replace(Trim(Mid(strLine, 39, 46)), "'", "''")
strUnit = Replace(Trim(Lcase(Mid(strLine, 21, 3))), "'", "''")
'Först kör vi en UPDATE om artikeln redan finns
strSQL = "UPDATE tblExArticle SET eNumber = '" & iEnumber & "', articleName = '" & strArticleName & "', articleUnit = '" & strUnit & "' WHERE eNumber = '" & iEnumber & "'"
objConn.Execute strSQL, lngRA, 128
if lngRa = 0 then
'Ny artikel, gör INSERT
strSQL = "INSERT INTO tblExArticle (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"
objConn.Execute strSQL,,128
End if
wend
objFile.close
set objFile = nothing
set objFSO = nothing
objConn.Close
Set objConn = Nothing
fungerar finfint som sagt...
Hur skulle man kunna bygga ut den att hantera "tomma rader" och felaktiga rader. Som det är nu så sparkar det bakut och inläsningen stoppas....
Mvh
henrik
Vad innehåller en tom rad? ingenting?
if not strLine = "" then
' fooo
end if
Du kan använda on error resume next för att strunta i alla fel som inträffar.
mvh
@nders skrev:
Vad innehåller en tom rad? ingenting?
if not strLine = "" then ' fooo end if
Jepp. Den är bara blank
@nders skrev:
Du kan använda on error resume next för att strunta i alla fel som inträffar.
mvh
Hur skulle en sådan lösning se ut? det får ju inte skrivas någonting till datab asen. Bara hoppa över
Mvh
Henrik
Jepp. Den är bara blank
Dåså.
Hur skulle en sådan lösning se ut? det får ju inte skrivas någonting till datab asen. Bara hoppa över
Hmm, det vet väl inte jag. Vad är det som går fel?
Den som söker, den finner... ;)
http://www.webforum.nu/showthread.php?t=136838&highlight=error+resume
Du får göra en egen felhanterare. Felen kan hämtas ur variabeln err.
T.ex.
err.number
err.description
Eller hur är det man gör? :P
r/ Attans också, för sent ute :P
Compusa skrev:
Den som söker, den finner... ;)
http://www.webforum.nu/showthread.php?t=136838&highlight=error+resume
:)
Hmmmf....
Mvh
Henrik
Nja, alltså vilken del i koden är det det blir fel på?
Med on error resume next fortsätter koden att köra efter den felaktiga raden. Om det inte är databasfrågandet det blir fel på, sätt en if-sats som kontrollerar att felnumret i Err-objektet är 0.
Glöm inte att sist i loopen nollställa Err-objektet...
Hej lite förtydligande är kanske på sin plats....
En textrad i Ahlsells prisfil ser ut så här:
1018265J00008150V309ST XHYLSSKRUVMEJSEL 11MM
Det finns ju en filbeskrivning också, som jag bifogar.
Nu ska ju filen vara intakt, men det hade känts fint att validera indatat så det verkligen höll det utlovade formatet.
Hur skulle man kunna validera att raden håller formatet?
Mvh
henrik
Hur skulle man kunna validera att raden håller formatet?
Skriv ett regexp-mönster för reglerna, så kan du validera varje rad för sig innan du försöker dig på att stoppa in ofullständiga grejer i databasen.
@nders skrev:
Hur skulle man kunna validera att raden håller formatet?
Skriv ett regexp-mönster för reglerna, så kan du validera varje rad för sig innan du försöker dig på att stoppa in ofullständiga grejer i databasen.
Hehe, det är nog lättare sagt än gjort....
Regexp.... hmm
Mvh
henrik
Hej!
Peter S har varit så snäll och hjälpt mig med att validera de olika delarna av de som jag plockar ut från textfilen. Jag publicerar hans svar här så denna tråden blir klar... Även som @nders skriver så kan man ju kontrollera att raden inte är tom på ett enkelt sätt enligt:
if not strLine = "" then
' fooo
end if
Så gott folk, här kommer Peter s svar:
------------------
Ok, om vi tittar på den första delen du plockar ut (iEnumber) så kan den enligt PDF-filen bestå av siffror eller bokstäver. Det kan du kontrollera med
Kod:
dim re
set re = new regexp
re.pattern = "^(?:[A-Z]|Ž|\d){7,8}$"
if re.test(iEnumber) then
' artikelnumret ok
else
' ej ok
end if
Det andra du hämtar ut är artikelbenämningen. Eftersom det fältet verkar kunna innehålla nästintill vilka tecken som helst, kan du validera det med
Kod:
re.pattern = "^.{0,84}$"
if re.test(strArticlename) then
' ok
else
' ej ok
end if
Det sista du hämtar är lagerenheten. Den verkar bara kunna innehålla versaler:
Kod:
re.pattern = "^[A-Z]{1,3}$"
if re.test(strUnit) then
' ok
else
' ej ok
end if
Tack för all hjälp!
Mvh
Henrik