DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

UseFileList

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

0 Kudos
Message 1 of 6
(3,731 Views)

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

0 Kudos
Message 2 of 6
(3,712 Views)
HI Brad,
danke für die Hilfe. 🙂
 
ich möchte jetzt einige Kanäle selektiv aus den ausgewählten Messdateien laden.
Wie spreche ich die Liste, in der die Messdateien sortiert gespeichert werden?
Ist es jetzt der FIlePaths?
 
Ich muss doch jetzt diese Liste durchgehen und die Dateien nacheinander öffnen und selektiv laden.
Darum möchte ich jede Datei in einer do... while Schleife ansprechen. ist doch korrekt gedacht oder?
 
viele grüße,
a6a
0 Kudos
Message 3 of 6
(3,700 Views)

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

0 Kudos
Message 4 of 6
(3,683 Views)

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

0 Kudos
Message 5 of 6
(3,672 Views)

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

0 Kudos
Message 6 of 6
(3,643 Views)