Toon posts:

[ASP] StringList uitlezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik een ActiveX component om via ASP tekst uit een PDF-bestand te lezen (Gnostice PDFToolkit).
Syntax is als volgt:
Function ExtractText(PageRange As String)

The ExtractText method extracts text from a page of the loaded PDF file. This returns the extracted text contents in a string list. It extracts text contents from PDF document by maintaining the content structure.
Ik krijg dus een StringList terug, maar het schijnt niet zo gemakkelijk te zijn om deze via ASP/VBScript uit te lezen..

Wat werkt:
code:
1
2
3
textAr = .ExtractText("1-10")
response.write(ubound(textAr))    ' <-- resultaat: 17409
response.write(typename(textAr))    ' <-- resultaat: String()


Wat allemaal niet werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
response.write(textAr)   ' <-- Incorrect datatype

response.write(join(textAr,""))   ' <-- Variable uses an Automation type not supported in VBScript

for i=0 to ubound(textAr)
  response.write(textAr(i))   ' <-- Type mismatch
  response.write(typename(TextAr(i)))   ' <-- Type mismatch
next 'i

for each i in textAr    ' <-- Type mismatch
  ...
next 'i


Hoe kan ik nou die StringList kunnen omzetten naar een "normale" string of array?

[ Voor 5% gewijzigd door Verwijderd op 28-02-2007 10:24 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09-10 22:53

TeeDee

CQB 241

Uit de documentatie van PDFToolkit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
' Load input file
PDFDoc.LoadFromFile (InputFile1)
Dim str() As String
Dim AllStr As String
Dim i As Integer
'Extract the formatted text from page 1.
str = PDFDoc.ExtractText("1")
AllStr = ""
For i = 0 To UBound(str) - 1
AllStr = AllStr + str(i)
Next i
MsgBox AllStr, , "Demo for ExtractText"

Wat je kan proberen: Werkt het met een PageRange van 1 pagina wel?

[ Voor 6% gewijzigd door TeeDee op 28-02-2007 11:46 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nope, nog steeds "Type mismatch"...

--edit: in bovenstaand voorbeeld staat "Visual Basic" ipv "VBScript".
In Visual Basic zal dat ongetwijfeld goed werken.

[ Voor 63% gewijzigd door Verwijderd op 28-02-2007 12:34 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09-10 22:53

TeeDee

CQB 241

En je hebt
VBScript:
1
for i=0 to Ubound(str) - 1
erin gezet ipv
VBScript:
1
for i = 0 to Ubound(str)
?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Klopt. Het gaat al meteen fout bij i = 0

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09-10 22:53

TeeDee

CQB 241

Zet eens een "on error resume next" erbij en een beetje spelen met je Response.Buffer om te kijken of er uberhaupt wel wat in de output komt.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Buffer staat uit.

Ik denk ook niet dat er een fout in mijn programmeerwerkje zit, maar ik kan gewoon geen methode verzinnen om "String()" op 't scherm te krijgen. "Variant()" (=de standaard VBScript array) lukt 't uiteraard wel.

Volgens mij is 't 'n probleem dat VBScript geen "strong types" ondersteunt.
Ik heb Gnostice ook om hulp gevraagd, maar een truc in VBScript (met ADODB.Stream oid) zou nog veel handiger zijn.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09-10 22:53

TeeDee

CQB 241

Je hebt ook zoiets als Array() in VBScript. Waarom je helemaal naar een ADODB.Stream zou willen is mij op dit moment met jouw uitleg een beetje een raadsel.

On Error Resume Next ook al gedaan?
Verwijderd schreef op woensdag 28 februari 2007 @ 15:00:
Vooruit, "on error resume next" gedaan, maar dan krijg ik niks meer op 't scherm.
offtopic:
Hoho, nu lijkt het net alsof je moeite met mijn tips hebt. Ik _hoef_ je niet te helpen hè. Als ik de informatie eruit moet trekken, ja, dan vraag ik wel eens extra om iets ja!

[ Voor 49% gewijzigd door TeeDee op 28-02-2007 15:07 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vooruit, "on error resume next" gedaan, maar dan krijg ik niks meer op 't scherm.

Mijn verwijzing naar ADODB.Stream sloeg op één van de vele trucs die je binnen VBScript kunt toepassen om het ene datatype naar het andere te converteren.

Hieronder een voorbeeld om van "Binary()" (oid) naar "String" te geraken (bij binaire upload van tekstbestand):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Function BinaryToString(ByRef Binary)
  dim result : result = ""
  If LenB(Binary)>0 Then
    Dim RS : Set RS = Server.CreateObject("ADODB.Recordset")
    RS.Fields.Append "mBinary", 201, LenB(Binary)
    RS.Open
    RS.AddNew
      RS("mBinary").AppendChunk Binary 
    RS.Update
    result = RS("mBinary")
    RS.Close
    Set RS = nothing
  End If
  BinaryToString = result
End Function

Maar dat geheel terzijde... ik vermoedde dat er een soortgelijke truc was om van "String()" naar "String" te geraken, aangezien de standaard VBScript methodes in dit geval allemaal niet werken.

Acties:
  • 0 Henk 'm!

  • Stiegl
  • Registratie: Mei 2004
  • Laatst online: 06-10 16:37
Ik ken het probleem, een collega van mij was er ook een keer mee bezig, maar zover ik weet is hij er niet uitgekomen :/
Het heeft er volgens mij mee te maken dat het object een .NET datatype teruggeeft, waar VBScript niet goed mee om weet te gaan.

Uit onderzoek is gebleken dat 85% van alle statistieken niet klopt

Pagina: 1