devotion Medlem sedan jan. 2001 3 582 inlägg Frågan 6 juni 2006 10:32 #1 Hej! :)
Jag har ju gjort script som läser in en textfil i en databas...
Kan man göra tvärtom, dvs hämta data från en databas och skapa en textfil med ett visst format? Om man kan det hur gör man?
mvh
Henrik
@nders Medlem sedan juni 2000 32 967 inlägg Det är klart man kan.
Lite stränghanteringsfunktioner, och använd FSO för att skapa och skriva till textfilen.
Du kan ju börja med att bygga upp en sträng som ser ut som en rad som du vill skriva till filen, och sedan är filskrivningen en kakbit.
mvh
devotion Medlem sedan jan. 2001 3 582 inlägg Hepp!
Gjorde s å här och det fjunkar ju...
<%
dim objConn, objRS, sSQL, fsObj,tfile
' Öppna databasen
' ***************
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open
set fsObj=Server.CreateObject("Scripting.FileSystemObject")
set tfile=fsObj.CreateTextFile(server.MapPath("/prisfiler/solar.txt"))
sSQL = "SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice, tblPrice.articleCategoryNumber, tblArticle.articleUnit, " &_
"tblCategory.CategoryName, tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, tblSupplier.SupplierId, " &_
"CASE WHEN articleDiscount is null THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END AS articlePriceWithDiscount " &_
"FROM tblArticle " &_
"INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber " &_
"INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId " &_
"LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber AND tblPrice.articleSupplierId = tblDiscount.supplierId " &_
"LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber " &_
"WHERE tblSupplier.supplierId = 1 " &_
"ORDER BY tblArticle.articlenumber"
Set objRS = Server.Createobject("ADODB.Recordset")
objRS.Open sSQL, objConn, 1, 2
Do while not objRS.EOF
sArticleNumber = objRS("articleNumber")
sArticleName = objRS("articleName")
dArticlePrice = cdbl(objRS("articlePrice"))
sLine = sArticleNumber & " " & sArticleName & " " & dArticlePrice
tfile.WriteLine(sLine)
objRS.Movenext
Loop
objRS.Close
Set objRS = Nothing
tfile.close
set tfile=nothing
set fsObj=nothing
%>
Men hur gör jag för att få fasta startpositioner för de olika variablerna i strängen sLine?
sLine = sArticleNumber & " " & sArticleName & " " & dArticlePrice
säg att jag vill att:
sArticleNumber ska börja position 1
sArticleName ska börja position 10
dArticlePrice ska börja position 60
Hur gör man då?
Mvh
Henrik
E emission Medlem sedan dec. 1999 6 721 inlägg Gör en liten funktion som ser till att en sträng alltid blir av en viss längd.
function GetFixedWidthString(stringVal,length)
GetFixedWidthString=left(stringVal & string(length," "),length)
end function
...och sedan är det ännu en kakbit.
devotion Medlem sedan jan. 2001 3 582 inlägg hmmmm... :(
Nu är jag inte riktigt med, som vanligt..
Säg att jag vill att formatet på textfilen ska vara så här:
0000040 Kabel 1 125
0001289 Kabel 2 150
1259861 Strömbrytare 256
Hur använder jag funktionen?
Mvh
Henrik
jonne Medlem sedan jan. 2001 1 154 inlägg Borde väl gå att peta in en &vbtab eftersom det ska skrivas ut i en ren textfil
J.N. Medlem sedan apr. 2003 1 660 inlägg HEJ!
Annars räcker det kanske med ; , : eller annat lämpligt tecken emellan?
Ang koden använder man den väl med GetFixedWidthString(sArticleName,10) så får du en sträng som är 10 tecken lång, med mellanslag för de positioner som du inte sArticleName täcker upp.
devotion Medlem sedan jan. 2001 3 582 inlägg
J.N. skrev:
HEJ!
Annars räcker det kanske med ; , : eller annat lämpligt tecken emellan?
Ang koden använder man den väl med GetFixedWidthString(sArticleName,10) så får du en sträng som är 10 tecken lång, med mellanslag för de positioner som du inte sArticleName täcker upp.
Hej!
Det går inte ha några tecken mellan. Det måste vara fasta positioner.... Men jag ska testa emissions fina funktion, nu när jag vet hur den funkar! ;)
Mvh
Henrik
devotion Medlem sedan jan. 2001 3 582 inlägg Hepp!
Så här fick det bli, med emissions finfina funktion:
<%
dim objConn, objRS, sSQL, fsObj,tfile
function GetFixedWidthString(stringVal,length)
GetFixedWidthString=left(stringVal & string(length," "),length)
end function
' Öppna databasen
' ***************
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open
set fsObj=Server.CreateObject("Scripting.FileSystemObject")
set tfile=fsObj.CreateTextFile(server.MapPath("/prisfiler/solar.txt"))
sSQL = "SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice, tblPrice.articleCategoryNumber, tblArticle.articleUnit, " &_
"tblCategory.CategoryName, tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, tblSupplier.SupplierId, " &_
"CASE WHEN articleDiscount is null THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END AS articlePriceWithDiscount " &_
"FROM tblArticle " &_
"INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber " &_
"INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId " &_
"LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber AND tblPrice.articleSupplierId = tblDiscount.supplierId " &_
"LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber " &_
"WHERE tblSupplier.supplierId = 1 " &_
"ORDER BY tblArticle.articlenumber"
Set objRS = Server.Createobject("ADODB.Recordset")
objRS.Open sSQL, objConn, 1, 2
Do while not objRS.EOF
sArticleNumber = GetFixedWidthString(objRS("articleNumber"), 10)
sArticleName = GetFixedWidthString(objRS("articleName"), 55)
dArticlePrice = GetFixedWidthString(cdbl(objRS("articlePrice")), 80)
sLine = sArticleNumber & sArticleName & dArticlePrice
tfile.WriteLine(sLine)
objRS.Movenext
Loop
objRS.Close
Set objRS = Nothing
tfile.close
set tfile=nothing
set fsObj=nothing
%>
Tackar!
Mvh
Henrik
Jesper T Medlem sedan nov. 2001 7 144 inlägg OT: Kan du inte lägga din långa sql-sats i en stored procedure.
Det är lite väl mycket konkantenerande... ;)
devotion Medlem sedan jan. 2001 3 582 inlägg Jo, det kan jag... Jag har dock inte använt mig av SP innan, så någon måste visa.... :D
Mvh
Henrik