Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: VBscript Daten lesen von csv, bestimmte Zeile

  1. #1
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen
    Ich möchte eigentlich was ganz einfaches tun:
    Ich möchte in einem Script eine bestimmte Zeile aus dem csv File lesen und auf die Variablen schreiben. Und da klemmt es:

    Alle Zeilen sind gleich (einfach mit anderen Werten, 100 Zeilen à 42 Werten).
    Die Variable mit der Zeilennummer ist "SmartTags("i")".

    Das heisst wenn der Inhalt der Variable SmartTags("i") = 42 ist, sollen die Werte der 42. Zeile auf die Variablen:

    SmartTags("ACTUAL_RECIPE_Rezept_SetFuntion")
    SmartTags("ACTUAL_RECIPE_Rezept_SetProductTempKMIX")
    SmartTags("ACTUAL_RECIPE_Rezept_SetTempSensor")
    usw. kopiert werden.
    Ich weiss nun nicht wie ich die Variable SmartTags("i") einbinden muss damit es funktioniert.
    Ich bitte um Hilfe. Besten Dank für Eure Tipps.


    Code wo die Variable eingefügt werden soll:
    Code:
    ' Werte von einer bestimmten Zeile einlesen
    
     MyZf = f.ReadLine
     field = Split(MyZf, ";")
    
     
    SmartTags("ACTUAL_RECIPE_Rezept_SetFuntion") = field(0) 
    SmartTags("ACTUAL_RECIPE_Rezept_SetProductTempKMIX") = field(1)
    SmartTags("ACTUAL_RECIPE_Rezept_SetTempSensor") = field(2)


    Ganzer Code:

    Code:
    Sub Read_data_from_file()
    Dim fso, f, ts, field, MyZf
    ' Catch errors -- Fehler abfangen
    On Error Resume Next
    ' Create file object -- Objekt erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Err.Number <> 0 Then
     ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
     Err.Clear
     Exit Sub
    End If
    Set f = fso.OpenTextFile(FileName, 1, 0, -2)
    If Err.Number <> 0 Then
     ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
     Err.Clear
     Exit Sub
    End If
     
    ' Werte von einer bestimmten Zeile einlesen
    
     MyZf = f.ReadLine
     field = Split(MyZf, ";")
    
     
    SmartTags("ACTUAL_RECIPE_Rezept_SetFuntion") = field(0) 
    SmartTags("ACTUAL_RECIPE_Rezept_SetProductTempKMIX") = field(1)
    SmartTags("ACTUAL_RECIPE_Rezept_SetTempSensor") = field(2)
    
     
    ' Tidy up -- Aufraeumen
    f.Close
    Set f = Nothing
    Set fso = Nothing
    ShowSystemAlarm "Readout of the data was successful!"
    End Sub
    Zitieren Zitieren VBscript Daten lesen von csv, bestimmte Zeile  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    In einer Schleife (While..Wend oder Do While..Loop) i - 1 Zeilen einlesen, dann liefert nach der Schleife das nächste ReadLine die Zeile(i) :
    Code:
    i = SmartTags("i")
    
    ' i-1 Zeilen lesen
    Do While i > 1
      MyZf = f.ReadLine
      i = i - 1
    Loop
    
    ' Zeile(i) lesen
    MyZf = f.ReadLine
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald
    Besten Dank für Deine rasche Antwort.
    Bin heute noch auf einer Anlage und werde es am Abend testen können. Die fertige Lösung sollte nur 1 bestimmte Zeile lesen. Das heisst ich werde den loop nicht benötigen.
    Werde die fertige Lösung posten.
    Bis bald.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo,

    den Loop benötigst Du unbedingt, weil es nicht möglich ist, in einer per OpenTextFile geöffneten Textdatei direkt eine bestimmte Zeile zu lesen. Es müssen vom Anfang der Datei i-1 Zeilen abgezählt eingelesen werden, damit der Datei-Lesezeiger auf der gewünschten Zeile i steht und das nächste ReadLine die gewünschte Zeile liefert.

    (Nicht wirklich eine Alternative: die gesamte Datei (mit unbekannter Anzahl Zeilen!) in ein großes Array einlesen, dann kann man die Zeilen wahlfrei im Array adressieren)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald
    Unglaublich wie schnell Du Antwortest. Besten Dank für Deine Hilfe. Ich werde es genau so wie Du mir geschrieben hast prüfen. Bis bald....melde mich

  6. #6
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald
    Leider funktioniert es nicht. Ich wäre um weitere Vorschläge sehr dankbar.

  7. #7
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Nun habe ich folgende Lösung gefunden, welche soweit auch funktioniert:
    Code zum lesen der Zeilen in ein Array
    Code:
    ' Read values till end of file -- Werte bis zum Dateiende einlesen
    Do While Not f.AtEndOfStream 
     
     MyZf = f.ReadLine
     field = Split(MyZf, ";")
      
     For i=0 To 42
      HiField(j,i) = field(i)
     Next
     j = j + 1 
    Loop
    x = SmartTags("i") - 1
    SmartTags("ACTUAL_RECIPE_Rezept_SetFuntion") = HiField(x,0) 
    SmartTags("ACTUAL_RECIPE_Rezept_SetProductTempKMIX") = HiField(x,1)
    SmartTags("ACTUAL_RECIPE_Rezept_SetTempSensor") = HiField(x,2)
    Das komplette Script:

    Code:
    Sub Read_data_from_file()
    Dim fso, f, ts, field, MyZf, i , j , HiField(100,42) , x 
    ' Catch errors -- Fehler abfangen
    On Error Resume Next
    i=0
    j=0
    ' Create file object -- Objekt erstellen
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Err.Number <> 0 Then
     ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
     Err.Clear
     Exit Sub
    End If
    Set f = fso.OpenTextFile(FileName, 1, 0, -2)
    If Err.Number <> 0 Then
     ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
     Err.Clear
     Exit Sub
    End If
    'SmartTags("i")=0
    ' Read values till end of file -- Werte bis zum Dateiende einlesen
    Do While Not f.AtEndOfStream 
     
     MyZf = f.ReadLine
     field = Split(MyZf, ";")
      
     For i=0 To 42
      HiField(j,i) = field(i)
     Next
     j = j + 1 
    Loop
    x = SmartTags("i") - 1
    SmartTags("ACTUAL_RECIPE_Rezept_SetFuntion") = HiField(x,0) 
    SmartTags("ACTUAL_RECIPE_Rezept_SetProductTempKMIX") = HiField(x,1)
    SmartTags("ACTUAL_RECIPE_Rezept_SetTempSensor") = HiField(x,2)
     
    ' Tidy up -- Aufraeumen
    f.Close
    Set f = Nothing
    Set fso = Nothing
    ShowSystemAlarm "Readout of the data was successful!"
    End Sub

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Supermario73 Beitrag anzeigen
    Hallo Harald
    Leider funktioniert es nicht. Ich wäre um weitere Vorschläge sehr dankbar.
    Was genau funktioniert nicht? Gibt es Runtimefehler-Meldungen?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Supermario73 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Ort
    MAGDEN
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Unsere Einträge haben sich gerade gekreuzt. Dank Deinem Input kam ich auf die Lösung. Besten Dank für die geduldige Unterstützung.

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hat Dein Runtime-PC so extrem Langeweile daß Du eine komplette csv-Datei einliest und in 4343 Werte splittest, von denen Dich eigentlich nur 3 Werte in einer einzigen Zeile interessieren, vieleicht sogar nur die ersten 3? Warum splittest Du auch alle uninteressanten Zeilen?

    Für professionellen Einsatz solltest Du noch ein paar Prüfungen einbauen ("On Error Resume Next" und dann keinerlei Prüfungen ist nicht professionell):
    Hat Deine csv-Datei garantiert in jeder Zeile 43 Werte stehen bzw. 42 Semikolons ";"?
    Hat Deine csv-Datei garantiert höchstens 101 Zeilen?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 09.07.2015, 13:58
  2. Antworten: 7
    Letzter Beitrag: 27.02.2015, 17:04
  3. Zerlegung einer CSV-Zeile in SCL
    Von nekron im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 16.06.2011, 09:49
  4. bestimmte Werte aus DB lesen
    Von selly im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 10.09.2010, 18:30
  5. VBScript ProTool/Pro csv
    Von RyanB im Forum HMI
    Antworten: 2
    Letzter Beitrag: 13.10.2005, 09:13

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •