protool string archivieren?

Zuviel Werbung?
-> Hier kostenlos registrieren
Innerhalb von ProTool werden Aktionen nur Ereignis-bezogen ausgeführt. Du hast die Möglichkeit, ein VB-Script z.B. bei Wert-Änderung oder bei Tasten-Drücken auszuführen.
Der Unterschied von VB-Script zu VB ist einfach gesagt, dass innerhalb von ProTool nicht alles machbar ist. Das Aufrufen von Funktionen in externen DLL's geht z.B. nicht.
Als Datei-Formate kannst du (sonfern installiert) auch z.B. Excel benutzen und dort direkt in von dir gewünschte Zellen schreiben.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Soo, bin jetzt soweit das ich den String schonmal einlesen und testweise verarbeiten konnte mit vbs, im moment hakt es daran die tabelle zu erstellen bzw einen zweiten datensatz reinzuschreiben... gestern abend lief alles 100%ig, dann hab ich ein bischen rumgespielt und jetzt finde ich den Fehler nicht.. beim ersten Durchlauf läuft alles super, beim zweiten durchlauf erhalte ich eine Fehlermeldung, alle programmabschnitte für sich laufen (habs auskommentiert) nur im zusammenspiel geht nichts.. jedes mal bekomme ich ne fehlermeldung das in zeile 22 ein objekt erforderlich wäre.. vielleicht hab ich auch nur wieder nen brett vorm kopf und seh den wald vor lauter bäumen nicht.. hier mal das script

Dim fso,fs,datei,textfile1,Barcode,str_Ergebnis 'Eine Art Variablendeklaration
Barcode = 123 'hier wird den variablen nen wert bzw string zugewiesen
str_Ergebnis = "positiv"
Set fso = CreateObject("Scripting.FileSystemObject") 'ein objekt erstellen
Set fs = CreateObject("WScript.Shell")
datei="E:\Testvbs\testcsv.csv"

If Not fso.FolderExists("E:\Testvbs") Then fso.CreateFolder("E:\Testvbs")

If Not fso.FileExists (datei) Then
Set TextFile1 = fso.CreateTextFile(datei, true)
textfile1.WriteLine "Datum;"&"Uhrzeit;"&"Barcode;"&"Ergebnis"
textfile1.WriteLine
End If
textfile1.Close
If fso.FileExists (datei) Then
Set TextFile1 = fso_OpenTextFile(datei, 8)
textfile1.WriteLine Date&";"&Time&";"&Barcode&";"&str_Ergebnis
End If
textfile1.Close
 
Hallo Pascal,
ich sehe im Moment nicht wo Zeile 22 ist, aber als Anmerkung vielleicht :
Die FileExists-Geschichte würde ich als IF .. THEN .. ELSE machen ... also :
Code:
If Not fso.FileExists (datei) Then 
   Set TextFile1 = fso.CreateTextFile(datei, true)
   textfile1.WriteLine "Datum;"&"Uhrzeit;"&"Barcode;"&"Ergebnis"
   textfile1.WriteLine 
[COLOR=red][B]ELSE[/B][/COLOR]
[COLOR=red][B]' End If                 <- Diesen Zeile sind über
' textfile1.Close      <- diese ist vermutlich der Fehler
' If fso.FileExists (datei) Then 
[/B][/COLOR]   Set TextFile1 = fso.OpenTextFile(datei, :cool:
   textfile1.WriteLine Date&";"&Time&";"&Barcode&";"&str_Ergebnis
End If
textfile1.Close

Versuch das mal ...
Gruß
LL
 
mir fällt kein fehler auf. aber wieso zeile 22 der code oben enthält weniger zeilen.

wenn du das mit else machst, dann musst du aber vor dem else noch
textfile1.WriteLine Date&";"&Time&";"&Barcode&";"&str_Ergebnis
einfügen.
denn sonst würdest du die erste datenzeile verlieren wenn die datei nicht existiert und trotzdem daten geschrieben werden sollen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aller Anfang ist schwer..

Erstmal danke für den guten Support!

Ich habe mich entschlossen etwas weiter unten anzusetzen, aber selbst da hapert es gewaltig.. weil ich manche Zeilen garnicht verstehe


Set fs = CreateObject("WScript.Shell")

Was passiert hier genau? hab mir jetzt das VBScript-Tutorium zugelegt, da sind die meisten Sachen ja ganz gut erklärt aber das Wscript.Shell konnte ich da jetzt nicht finden..

Habs jetzt durch Trial and Error hinbekommen... es lag daran das ich in diesem Teil:
If Not fso.FileExists(datei) Then
fso.CreateTextfile(datei) 'Datei erstellen falls noch nicht da

Set MeineTextDatei = fso.CreateTextFile (datei,true)
MeineTextDatei.Writeline "Datum;"&"Uhrzeit;"&"Barcode;"&"Ergebnis"
MeineTextDatei.Writeline

hinter dem Then direkt weiter geschrieben hab, nach einem Absatz ging es.. ist das Normal?
Dem Compiler ist es doch wurscht ob das jetzt dahinter oder 10 Zeilen darunter steht!?
So kenne ich es aus C, oder hängt es vielleicht damit zusammen das in Basic keine Semikolons verwendet werden? (mal so eine Vermutung)

Gruß

Pascal
 
Zuletzt bearbeitet:
hinter dem Then direkt weiter geschrieben hab, nach einem Absatz ging es.. ist das Normal?
Dem Compiler ist es doch wurscht ob das jetzt dahinter oder 10 Zeilen darunter steht!?
nee, das ist nicht egal.

wenn hinter dem then direkt was steht, wird dies ausgeführt
es darf kein end if folgen

wenn mit zeilenumbruch, wird alles ausgeführt bis zum end if

if blabal = 1 then nur dies = 1 'das ist ok
und diese = 1 'wird immer, unabhängig von der if-anweisung ausgeführt
end if '<- dies produziert einen fehler da if bereits 'beendet'

oder so

if blabal = 1 then
nur dies = 1
und diese = 1
end if 'so gehts
 
Zuletzt bearbeitet:
oder hängt es vielleicht damit zusammen das in Basic keine Semikolons verwendet werden? (mal so eine Vermutung)

Hallo Pascal,
das ";" von "Pascal" (und "C" ?) ist in "Basic" ein ":". Das könntest du auch machen - sieht aber unübersichtlich aus. Ein Zeilenumbruch bewirkt das gleiche.

Mit "CreateObject" teilst du der Datei-Ausgabe mit, was du da eigentlich erstellen willst. Das hat auch nichts mit Basic zu tun, sondern kommt ursächlich von Windows. Du könntest anstelle einer "WScript.Shell" z.B. auch eine "Excel.Application" erstellen (also auf ein Excel-Sheet schreiben wollen).

Vielleicht hier noch ein Beispiel :
Code:
[SIZE=2][COLOR=#0000ff]
Const[/COLOR][/SIZE][SIZE=2] ForReading = 1, ForWriting = 2, ForAppending = 8
 
Verzeichnis = "c:\Mess-Daten\Monat[/SIZE][SIZE=2]\" 
Datei = "Messung[/SIZE][SIZE=2].csv"
Ziel = Verzeichnis + Datei
[/SIZE][SIZE=2] 
[/SIZE][SIZE=2][COLOR=#008000]' Ziel-Verzeichnis schon vorhanden ?
' ... wenn nein, dann erst erzeugen ...
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][SIZE=2] fs = CreateObject("Scripting.FileSystemObject")
[/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][SIZE=2] fs.FolderExists (Verzeichnis) [/SIZE][SIZE=2][COLOR=#0000ff]Then
[/COLOR][/SIZE][SIZE=2]fs.CreateFolder (Verzeichnis)
[/SIZE][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] 
[/SIZE][SIZE=2][COLOR=#008000]' Ziel-Datei schon vorhanden ?
' ... wenn nein, dann erst erzeugen ...
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][SIZE=2] fs.FileExists (Ziel) [/SIZE][SIZE=2][COLOR=#0000ff]Then
[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel , ForWriting, [/SIZE][SIZE=2][COLOR=#0000ff]true[/COLOR][/SIZE][SIZE=2])
f.WriteLine "Messdaten Anlage 198"
[/SIZE][SIZE=2][COLOR=#0000ff]Else
[/COLOR][/SIZE][SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]Set[/COLOR][/SIZE][SIZE=2] f = fs.OpenTextFile(Ziel , ForAppending)
[/SIZE][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] 
[/SIZE]
Danach wird dann geschrieben und anschlißend ge-"closed". Das kennst du ja schon ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Pascal,

Mit "CreateObject" teilst du der Datei-Ausgabe mit, was du da eigentlich erstellen willst. Das hat auch nichts mit Basic zu tun, sondern kommt ursächlich von Windows. Du könntest anstelle einer "WScript.Shell" z.B. auch eine "Excel.Application" erstellen (also auf ein Excel-Sheet schreiben wollen).

LL

Muss Excel dafür installiert sein?
Ich habs jetzt soweit fertig das ich die Sachen abspeichern kann mit Uhrzeit, Datum , Artikelnummer und Ergebnis, Ziel ist eine csv-Datei, das sollte eigentlich reichen.

Ist es bei Protool eigentlich nicht möglich nach fertigstellung des Scripts noch weitere Parameter mit reinzunehmen? habs bis jetzt immer so gemacht das ich das script neu angelegt habe, aber das kann ja keine Lösung sein wenn man am Testen ist.. :rolleyes:

Gruß

Pascal
 
Hallo Pascal,
wenn du nach Excel schreiben willst, dann muß Excel auch installiert sein.

Das Script kannst du beliebig oft ändern. Du must es nicht jedesmal neu schreiben. Es muss halt dann "nur" als ProTool-Projekt auf deinen Visualisierungs-Rechner.

Gruß
LL
 
aber der Button "Hinzufügen" in der Registerkarte "Allgemein" ist dann "grau" so daß man ihn nicht anwählen kann
 
Moin, da bin ich mal wieder!
Läuft jetzt alles ganz gut, jetzt stellt sich mir die Frage wie ich aus einem String einzelne character rausziehen kann. Hab da die Read Funktion im Auge, mit der sich ja eine definierte Anzahl an Charactern aus dem String ziehen lassen..
Aber die Read-Funktion kann sich ja nicht merken bis wohin sie gelesen hat.. von daher ist das ganze doch unbrauchbar für mich, seh ich das so richtig?
 
Hallo,
den ganzen String einlesen und dann mit MID (oder LEFT oder RIGHT) zerpflücken. Lies dir die Befehle mal in der "Visual Basic Hilfe" durch.

Gruß
LL
 
Moin Jungs! Ich brauch nochmal eure Hilfe, und zwar sieht es folgendermaßen aus. Ich habe jetzt eine csv-Datei in der Verschiedene Daten hinterlegt sind; eine Materialnummer mit der der Prüfling Identifiziert wird und eine dazugehörige Rezeptnummer die dann dass passende Rezept laden soll, leider bekomme ich es nicht auf die Reihe eine "999" zurückzugeben wenn keine passende Materialnummer vorhanden ist, ich hänge mal den Quelltext an, dann wird es etwas klarer.
Sobald ich das "else" mit reinnehme gibt er mir nurnoch die 999 zurück..

Gruß

Pascal
 

Anhänge

  • script.txt
    649 Bytes · Aufrufe: 13
bekommst du denn ein Auftragsnr_verarbeiten wert ohne das else?
poste mal eine zeile aus der Zuordnung.csv
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, es funktioniert alles einwandfrei. Das ist es ja gerade..
Ohne Else gibt er den passenden Wert (rezeptnr) zurück und sobald ich das else einsetze bekomm ich ausschließlich die 999

so sieht das aus

Gehäuseart;1234567890;007
 
der code ist ok. auch das mit dem else. sollte eigentlich funzen.

sonst machs so
Code:
Auftragsnr_verarbeiten = 999
If InStr(1,Stringzeile,Mat_nr) <> 0  Then     
  position = InStr(1,Stringzeile,Mat_nr)         'Rückgabe des Startposition der Übereinstimmung
  position = position+11                         'vorrücken bis zur Rezeptnummer    
  Auftragsnr_verarbeiten = Mid(Stringzeile, position)  'Rückgabe  Rezeptnummer         
End If
 
Läuft aber nicht, habs gerade nochmal durchprobiert, beim alten(mit else) sowie beim neuen bekomme ich jetzt bei "1111111111" und bei "2222222222" ne 999 zurück.
in der dritten und letzten Zeile funktionierts, da bekomm ich die 7 zurück..
Was fürn scheiss Fehler, hab mal die original csv mit in den anhang geschrieben.. wär super wenn du dir das nochmal angucken könntest und evtl. ne Idee hast womit das zusammenhängen könnte


Was mir aber noch aufgefallen ist und ich mir nicht erklären kann ist folgendes Problem:
Wenn ich das ganze If und Else zeugs rausnehme zählt er nichtmehr richtig und gibt mir nen textfragment zurück was vor der materialnummer liegt.. fand ich schon sehr komisch..

So hätte hatte ich das heute morgen geschrieben:

Do While Not f.AtEndOfStream
Stringzeile = f.ReadLine()
Position = Instr(1,Stringzeile,Mat_Nr)
Position = Position+11
Auftragsnr_verarbeiten = Mid(Stringzeile,position)
 

Anhänge

  • script.txt
    886 Bytes · Aufrufe: 10
Zurück
Oben