---
title: "Läsa in semikolonseparerad textfil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/174561-läsa-in-semikolonseparerad-textfil"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2008-10-06T11:57:50.000Z"
updated: "2008-10-07T17:53:58.000Z"
replies: 12
views: 1304
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/174561-läsa-in-semikolonseparerad-textfil"
---

# Läsa in semikolonseparerad textfil

## #1 — devotion, 2008-10-06T11:57Z

Hej på er!

Sökte lite i forumet för att hitta nått som kan läsa in en textfil...

Hittade då denna:
<http://www.webforum.nu/showthread.php?p=1246578#post1246578>
  :e 

Nu har jag en annan textfil som jag vill läsa in, som är semikolonseparerad.

Kan man läsa in en sådan fil på likande sätt?

Filen har en H-del (orderhuvud) och en L-del (orderrader)

Och ser ut så här:

> H;;;6;;;102805;;;;;;;;;;;;;;;;;2008-10-01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Finn Rasmussen;;;;;;;;;;;;2;;;;;;;;;;;-1
> L;1;13SYS05700D02;;12;24;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/174561

## #2 — voigtann1, 2008-10-06T13:45Z

Är det samma "data" per rad, eller kan det innehålla någon annan data (menar att varje ; kan ha en text framför sig:

```
H;Test;produkt;mm....
```

Eller är det bara dessa data du är intresserad av?

Jag hade kanske gjort en RegExp replace på ";+" =\> ";" och sedan bara köra en vanlig Split(newValue,";") för att få ut arrayn på det sättet.

Permalänk: https://www.webforum.nu/p/2145536

## #3 — devotion, 2008-10-06T19:02Z

Hej! :)  

Jag tror inte regexp behövs i detta fallet... :)  

Jag har gjort så här:

```
Sub main()
	dim o, f, line
	dim q, i
	dim lOrderId
	
	set o = createObject("scripting.filesystemobject")
	set f = o.openTextfile("\\lin-dc\ClientApps\UppdragNU\Tools\order.txt", 1)

	do while not f.atendofstream
		line = f.readline
		
		If left(line, 1) = "H" then

			q = split(line,";")
			
			for i = lbound(q) to ubound(q)
			next
			lOrderId=CreateOrder("System", Now(), q(1), "Adm", q(6), q(23))
		Elseif left(line, 1) = "L" then
			q = split(line,";")
			
			for i = lbound(q) to ubound(q)
			next
			Call CreateOrderRows(lOrderId, q(2), q(4), q(5))
		End if
	loop
	
	set o = nothing
	set f = nothing
	
	Call refresh()
End Sub
```

Textfilen är uppbyggd på detta sättet:

> H;1000;;6;;;102805;;;;;;;;;;;;;;;;2008-10-06;2008-10-01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Finn Rasmussen;;;;;;;;;;;;2;;;;;;;;;;;-1
> L;1;13SYS05700D02;;12;24;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;2;23DOT06000G20;;4;113;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;3;23DOT06000G46;;4;113;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;4;05GRA14300D90;;6;79;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;5;05GRA14300H01;;6;79;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> H;1000;;6;;;100052;;;;;;;;;;;;;;;;2008-10-06;2008-10-01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Finn Rasmussen;;;;;;;;;;;;2;;;;;;;;;;;-1
> L;6;27KUD04600N05;;4;42;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;7;27KUD05000N05;;12;42;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;8;27KUD06000N05;;8;64;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;9;21MAN54000B40;;12;69;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;10;21PEP54000G29;;12;69;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;11;21PEP54000G06;;12;69;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;12;23SET05000G19;;4;82;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;13;23SID05000G15;;4;82;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;14;23SID05000H01;;4;82;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;15;23SPR04600G20;;4;99;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> H;1000;;6;;;100030;;;;;;;;;;;;;;;;2008-10-06;2008-10-01;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Finn Rasmussen;;;;;;;;;;;;2;;;;;;;;;;;-1
> L;16;13SYS05700H01;;12;24;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;17;06ORI03600D90;;12;23;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;18;06ORI03600H01;;12;23;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;19;05ORI14800D90;;6;89;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;20;05ORI14800H01;;6;89;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;21;17BAS23702G16;;2;360;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;22;17BAS23702C57;;2;360;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1
> L;23;17TWI23702N01;;2;340;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;2008-09-30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1

Allt verkar fungera, ovanstående kod ger tre ordrar med rätt orderrader....

Något jag behöver tänka på, eller ser allt bra ut?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2148632

## #4 — devotion, 2008-10-06T19:47Z

Har gjort om koden lite

```
Sub main()
	dim Conn, sSQL
	dim o, f, line
	dim q, i
	dim lOrderId, lOrderArtId
	
	'Öppna databasen
	Set Conn=CreateObject("ADODB.Connection")
	Conn.Open Application.sDbConnectionString
	
	set o = createObject("scripting.filesystemobject")
	set f = o.openTextfile("\\lin-dc\ClientApps\UppdragNU\Tools\order.txt", 1)

	do while not f.atendofstream
		line = f.readline
		
		If left(line, 1) = "H" then

			q = split(line,";")
			
			for i = lbound(q) to ubound(q)
			next
		
			lOrderId=GetNextId("tblOrder")

			sSQL ="INSERT INTO [tblOrder]" _
				& "([Id], [Modified], [Status], [CreatedBy], [CreatedDate], [Nr], [UserSign], [CustomerNr], [OrderDate])" _
				& "VALUES (" & lOrderId & ",GetDate(), 2,'System',GetDate(),'" & q(1) & "','Adm','" & q(6) & "','" & q(23) & "')"
				Conn.Execute sSQL,,128
				
		Elseif left(line, 1) = "L" then
			q = split(line,";")
			
			for i = lbound(q) to ubound(q)
			next

			lOrderArtId=GetNextId("tblOrdArt")
	
			sSQL ="INSERT INTO [tblOrdArt]" _
				& "([Id], [Modified], [OrderId], [ArtNr], [Amount], [Price], [Unit])" _
				& "VALUES (" & lOrderArtId & ",GetDate()," & lOrderId & ",'" & q(2) & "','" & q(4) & "','" & q(5) & "','st')"
				Conn.Execute sSQL,,128
		End if
	loop
	
	set o = nothing
	set f = nothing
	
	Conn.Close
	Set Conn=Nothing
	
	Call refresh()
End Sub
```

Hur hanterar man på bästa sätt uppdateringar. Dvs om en order redan finns så skall uppgifterna i orderhuvudet uppdateras, raderna skall uppdateras, läggas till eller tas bort...

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/2148639

## #5 — Peter S, 2008-10-06T20:07Z

De dubbla förekomsterna av

```
 			for i = lbound(q) to ubound(q)
			next
```

...kan du ta bort. De gör ingen nytta.

Permalänk: https://www.webforum.nu/p/2148645

## #6 — devotion, 2008-10-06T20:12Z

> **Peter S skrev:**
>
> De dubbla förekomsterna av
>
> ```
>  			for i = lbound(q) to ubound(q)
> 			next
> ```
>
> 
> ...kan du ta bort. De gör ingen nytta.

Hmmm, hur menar du nu? :)

Varför behövs inte de? den ena är ju om raden börjar med H, den andra om raden börjar med L... :)

Permalänk: https://www.webforum.nu/p/2148647

## #7 — Peter S, 2008-10-07T06:59Z

Nej, inte i det här fallet, eftersom du inte gör någonting i loopen:

```
for...
  ' här gör du inget!
next
```

Permalänk: https://www.webforum.nu/p/2148703

## #8 — devotion, 2008-10-07T08:15Z

aha! :)

Permalänk: https://www.webforum.nu/p/2148708

## #9 — devotion, 2008-10-07T09:16Z

eller, nähä....

Jag fattar inte... :(

Permalänk: https://www.webforum.nu/p/2148716

## #10 — Peter S, 2008-10-07T10:02Z

Om jag ställer följande frågor då: Varför menar du att looparna behöver vara kvar? Vad för arbete görs i dem?

Permalänk: https://www.webforum.nu/p/2148721

## #11 — devotion, 2008-10-07T10:08Z

inget... :)

Permalänk: https://www.webforum.nu/p/2148722

## #12 — Peter S, 2008-10-07T10:15Z

Aha! :D

Permalänk: https://www.webforum.nu/p/2148723

## #13 — devotion, 2008-10-07T17:53Z

Hej igen! :)   

Så här då:

```
'****************************************
Option explicit
'****************************************
Sub main()
	dim Conn, sSQL
	dim o, f, line
	dim q, i
	dim lOrderId, lOrderArtId
	
	'Öppna databasen
	Set Conn=CreateObject("ADODB.Connection")
	Conn.Open Application.sDbConnectionString
	
	set o = createObject("scripting.filesystemobject")
	set f = o.openTextfile("\\lin-dc\ClientApps\UppdragNU\Tools\order.txt", 1)

	do while not f.atendofstream
		line = f.readline
		
		If left(line, 1) = "H" then
			q = split(line,";")
					
			lOrderId=GetNextId("tblOrder")

			sSQL ="INSERT INTO [tblOrder]" _
				& "([Id], [Modified], [Status], [CreatedBy], [CreatedDate], [Nr], [UserSign], [CustomerNr], [OrderDate])" _
				& "VALUES (" & lOrderId & ",GetDate(), 2,'System',GetDate(),'" & q(1) & "','Adm','" & q(6) & "','" & q(23) & "')"
				Conn.Execute sSQL,,128
				
		Elseif left(line, 1) = "L" then
			q = split(line,";")

			
			lOrderArtId=GetNextId("tblOrdArt")
	
			sSQL ="INSERT INTO [tblOrdArt]" _
				& "([Id], [Modified], [OrderId], [ArtNr], [Amount], [Price], [Unit])" _
				& "VALUES (" & lOrderArtId & ",GetDate()," & lOrderId & ",'" & q(2) & "','" & q(4) & "','" & q(5) & "','st')"
				Conn.Execute sSQL,,128
		End if
	loop
	
	set o = nothing
	set f = nothing
	
	Conn.Close
	Set Conn=Nothing
	
	Call refresh()
End Sub
```

Hur gör man bäst (med tanke på prestanda mm) för att kolla om en order redan finns och isåfall göra en update, annars insert?

mvh
Henrik

Permalänk: https://www.webforum.nu/p/2148782

---

Tråden på webben: https://www.webforum.nu/amne/asp/174561-läsa-in-semikolonseparerad-textfil
