09-26-2007 05:11 AM
Hallo Kollegen,
ich benutze in meinem Skript UseFileList, um mehrere Messdateien aus der *.lst zu laden.
Leider stelle ich fest, dass NUR EINE, die erste Messdatei aus der Liste geladen wird und weitere nicht.
Bitte um Hilfe,
was muss ich noch berücksichtigen, damit alle Dateien geladen werden?
Main.vbs:
Option Explicit 'Forces the explicit declaration of all the variables in a script.
filenameget "any", "fileread",datadrvuser&"*.DAT","DAT","laden.lst",1,"Mark all DAT files to convert"
if dlgstate = "IDOk" then scriptstart "laden"
Laden.vbs:
…
MyFile = UseFileList
For iLoop = 0 to 5
Call DataFileLoadSel(MyFile,"MDF","*/"& chnlist1(iLoop),"")
Next
Call DataBlInsert (…)
datafilesave Datasetname, "TDM"
Danke im Voraus,
a6a
09-26-2007 10:59 AM
Hi a6a,
Ich bevorzuge das Anwenden eines expliziten Arrays anstatt der "Seriellen Auswertung":
DlgTitle = "Insert File Dialog Title Here..."
StartPath = ProgramDrv & "Libr\Dat\"
FileExts = "*.DAT;*.TDM"
Call FileNameGet("Any", "FileRead", StartPath, FileExts, "Nul", True, DlgTitle)
FilePaths = Split("|" & FileDlgFileName,"|")
Call BubbleSort(FilePaths) ' sort the array of file names alphabetically
HdrMsg = " i " & vbTAB & "ArrayValues(i)" & vbCRLF
HdrMsg = HdrMsg & "-----" & vbTAB & String(60, "-")
FOR i = 1 TO UBound(FilePaths)
Msg = Msg & " " & i & " " & vbTAB & FilePaths(i) & vbCRLF
NEXT ' i
MsgBox Msg
'-------------------------------------------------------------------------------------
'-- BubbleSort() -- -- NEW SUBROUTINE --
'-------------------------------------------------------------------------------------
Sub BubbleSort(NamesToSort)
Dim i, SwapName, Swapped
Do ' Until bubble sort of NamesToSort() is finished
Swapped = False
FOR i = 1 TO UBound(NamesToSort)-1
IF StrComp(UCase(NamesToSort(i)), UCase(NamesToSort(i+1))) > 0 THEN
SwapName = NamesToSort(i)
NamesToSort(i) = NamesToSort(i+1)
NamesToSort(i+1) = SwapName
Swapped = True
END IF ' Name(i) and Name(i+1) need to be swapped
NEXT ' i
Loop Until NOT (Swapped)
End Sub ' BubbleSort()
Brad Turpin
DIAdem Product Support Engineer
National Instruments
09-27-2007 05:56 AM
09-27-2007 09:43 AM
Hallo a6a,
Ich bevorzuge FOR NEXT Schleifen, wenn moeglich, da sie nie unendlich sein koennen. Die Arrayvariable "FilePaths()" beinhaltet alle (durch Dateinamen sortierte) Dateipfade. Also koennen Sie diese Dateien auf folgenderweise bearbieten:
Call DataDelAll
FOR i = 1 TO UBound(FilePaths)
Call DataFileLoadSel(FilePaths(i), "", "[1]/*")
' hier koennen Sie die Daten auswerten und/oder den Report erstellen
' PicFileAppend() ist hier nuetzlich, wenn man mehrere REPORT-Reiter erstellen moechte
NEXT ' i
Gruss aus sonnigen Austin,
Brad Turpin
DIAdem Product Support Engineer
National Instruments
09-28-2007 08:34 AM
Hi Brad,
vielen dank für Deine Hilfe. Jetzt habe ich ein Problem weniger. J
Würdest Du so nett sein sein und hier mal mit Deinem Profi_Auge den Fehler finden.
Ich deklariere hier ein Kanal und beschreibe ihm mit den Werte aus einem anderen Kanal.
Wobei ich zwei Zeilen aus dem Kanal cY in den Kanal cNewY schreibe möchte.
Allerdings funktioniert die FKT chdx nicht. Benutze ich sie falsch?
Call ChnAlloc(cn(cY)&"_long", 300000, 1, DataTypeFloat64)
cNewY = CNo (cn(cY)&"_long")
for j = 1 to cl(cY)
chdx(j,cNewY) = novalue
next
cl(cNewY) = cl(cY)
for i=1 to cl(cY)
For intLoop = 1 to 2
CHDX((i-1)*2+intLoop,cNewY) = chdx(i, cY)
Next
Next
Kannst Du den Fehler sehen?
Viele Grüße aus verregneten München,
a6a
10-01-2007 11:06 AM
Hallo a6a,
Zuerst wuerde ich Dir beten, den Befehl ChnLinGen() zu benutzen, anstatt ChnAlloc() und einer expliziten Schleife von ChDX() aufrufe-- so kann man viel effizienter einen Kanal mit NoValues erstellen:
cNewYName = ChnLinGen(cn(cY)&"_long", NoValue, NoValue, cl(cY) )
cNewY = CNo(cNewYName)
Bemerke mal, dass wir die korrekte Kanallaenge im vierten Parameter sofort angegeben haben, und dass wir uns den neuen Kanalpfad als Rueckgabewert geben lassen haben.
Leider weiss ich nicht, was Du mit dem untenstehenden Code erreichen moechtest. Dabei wird jeder Wert des neuen Kanals zweimal angegeben, und eben einmal ueberschrieben.
for i=1 to cl(cY)
For intLoop = 1 to 2
CHDX((i-1)*2+intLoop,cNewY) = chdx(i, cY)
Next
Next
Wenn Du also einfach den Kanal kopieren moechtest, dann empfehle ich die Funktion ChnCopy().
Brad Turpin
DIAdem Product Support Engineer
National Instruments