webForumDet fria alternativet

Inläsning av text fil

ASP

12 svar · 602 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

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

Medlem sedan juni 200032 967 inlägg
#2

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

Medlem sedan jan. 20013 582 inlägg
#3

@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

Medlem sedan juni 200032 967 inlägg
#4

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?

Medlem sedan jan. 20023 327 inlägg
#5

Den som söker, den finner... ;)
http://www.webforum.nu/showthread.php?t=136838&highlight=error+resume

Medlem sedan juli 20041 183 inlägg
#6

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

Medlem sedan jan. 20013 582 inlägg
#7

hehe... jag ska framkalla ett fel och posta felmeddelandet....

Mvh
henrik

Medlem sedan jan. 20013 582 inlägg
#8

Compusa skrev:

Den som söker, den finner... ;)
http://www.webforum.nu/showthread.php?t=136838&highlight=error+resume

:)
Hmmmf....

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#9

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...

Medlem sedan jan. 20013 582 inlägg
#10

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

Medlem sedan juni 200032 967 inlägg
#11

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.

Medlem sedan jan. 20013 582 inlägg
#12

@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

Medlem sedan jan. 20013 582 inlägg
#13

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

252 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)