Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  txt-file (Zeile bestimmen)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  txt-file (Zeile bestimmen) (2025 mal gelesen)
newmann
Mitglied



Sehen Sie sich das Profil von newmann an!   Senden Sie eine Private Message an newmann  Schreiben Sie einen Gästebucheintrag für newmann

Beiträge: 18
Registriert: 15.08.2011

erstellt am: 06. Sep. 2011 08:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
habe ein kleines Problem und hoffe das mir jemand weiterhelfen kann. Ich möchte Informationen (Pfad, Position, etc.) welche ich vorher ermittelt habe in eine txt-file schreiben, da ich diese Datei für mehrere Informationen nutze möchte ich die Zeile im txt-file bestimmen wo die Information hingeschrieben werden sollen (nicht immer am Anfang). weiß jemand wie ich dies mache??
Zum Verständnis mein bsheriger Code:

path = CATIA.SystemService.Environ("CATUSERSETTINGPATH")
    File = "Daten.txt"
    Bez = path & "\" & File
    Set Datei = CATIA.FileSystem.CreateFile(Bez, True)
    Set Bstream = Datei.OpenAsTextStream("ForWriting")
    Bzeile = "Daten" & ";" & pos_left & ";" & pos_top & ";" & Fenster & vbLf
    Bstream.Write Bzeile
    Bstream.Close

Danke schon mal für eure Hilfe.....

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

meisterlumpi
Mitglied



Sehen Sie sich das Profil von meisterlumpi an!   Senden Sie eine Private Message an meisterlumpi  Schreiben Sie einen Gästebucheintrag für meisterlumpi

Beiträge: 118
Registriert: 15.04.2011

Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64

erstellt am: 06. Sep. 2011 09:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für newmann 10 Unities + Antwort hilfreich

Hi

mit

Code:
Datei.OpenAsTextStream(ForAppending)

kannst du den text an die bestehende datei anhängen ohne sie zu überschreiben. direkt in eine bestimmte zeile zu schreiben ohne den text vorher zu löschen wird schwierig und viel fummelei. http://www.virtualsplat.com/tips/visual-basic-fso.asp

wenns nicht unbedingt eine .txt sein muss würde ich dir vorschlagen eine ini-datei zu benutzen. siehe http://www.vbarchiv.net/workshop/workshop_21-ini-dateien-bearbeiten-und-verwalten.html
gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

newmann
Mitglied



Sehen Sie sich das Profil von newmann an!   Senden Sie eine Private Message an newmann  Schreiben Sie einen Gästebucheintrag für newmann

Beiträge: 18
Registriert: 15.08.2011

erstellt am: 06. Sep. 2011 09:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
Danke erstmal, ist aber nicht so ganz das was ich benötige :-(
mit dem "Appending-Code" hänge ich an den bestehenden Code  nur an. Leider aber wird immer angehängt, wenn z. B. in der 2.Zeile bereits etwas steht dann möchte ich den Text in der 2. Zeile überschreiben (ohne den Text in der 1. Zeile zu ändern und umgekehrt)und nicht als 3.Zeile dran hängen. Schließlich möchte ich später auch genau die Information aus der 2. Zeile auslesen.
mit der ini-Datei kenne ich mich nicht so aus muß mich da erst "reinlesen" (und es verstehen).
Habe versucht evtl. mit "Zeile = Split" etwas zu erreichen leider ohne Erfolg.

gibt es vielleicht ne andere Möglichkeit das mit dem txt-file hinzubekommen??

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

meisterlumpi
Mitglied



Sehen Sie sich das Profil von meisterlumpi an!   Senden Sie eine Private Message an meisterlumpi  Schreiben Sie einen Gästebucheintrag für meisterlumpi

Beiträge: 118
Registriert: 15.04.2011

Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64

erstellt am: 06. Sep. 2011 10:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für newmann 10 Unities + Antwort hilfreich

Zitat:
wenn z. B. in der 2.Zeile bereits etwas steht dann möchte ich den Text in der 2. Zeile überschreiben (ohne den Text in der 1. Zeile zu ändern und umgekehrt)und nicht als 3.Zeile dran hängen

dann müsstest du vor jedem schreiben einer zeile die komplette text-datei erstmal auslesen in einen string. dann den string an den "neuen Zeilen" splitten so dass du ein array erhälst mit den einzelnen zeilen als komponenten.

array1 = split(string1, vbCrLf)

oder sowas in der richtung.

dann kannst du deine Zeile im array ersetzen mit

array1(zeilennummer) = "whatever"

und das ganze wieder in einem string zusammenfassen und in die datei schreiben.

string2 = join(array1, vbCrLf)
...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

meisterlumpi
Mitglied



Sehen Sie sich das Profil von meisterlumpi an!   Senden Sie eine Private Message an meisterlumpi  Schreiben Sie einen Gästebucheintrag für meisterlumpi

Beiträge: 118
Registriert: 15.04.2011

Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64

erstellt am: 06. Sep. 2011 10:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für newmann 10 Unities + Antwort hilfreich

kurz zu den ini's

in einer ini gibt es Sections, Keys und Values. Eine Section kann beliebig viele Keys beinhalten, denen man Values, also Werte zuordnen kann.

<Section1>
Key1=Value1
Key2=Value2
...

<Section2>
...


folgendes modul kannst du dir in dein vba projekt kopieren

Code:

    '' DLL-Funktionen zum LESEN der INI deklarieren
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
        ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

    '' DLL-Funktion zum SCHREIBEN in die INI deklarieren
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
        ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, _
        ByVal lpFileName As String) As Integer

    '' DLL-Funktion zum Löschen einer ganzen Sektion deklarieren
    Private Declare Function DeletePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
        ByVal Section As String, ByVal NoKey As Integer, ByVal NoSetting As Integer, _
        ByVal FileName As String) As Integer

    Public Function ReadValue(ByVal iSection As String, _
                              ByVal iKey As String, _
                              ByVal iPath As String, _
                              Optional ByVal iDefault As String = "", _
                              Optional ByVal iBufferSize As Integer = 1024) As String
        Dim sTemp As String
        sTemp = Space(iBufferSize)
        Dim Length As Integer
        Length = GetPrivateProfileString(iSection, iKey, iDefault, sTemp, iBufferSize, iPath)
        ReadValue = Left(sTemp, Length)
    End Function

    Public Sub WriteValue(ByVal iSection As String, ByVal iKey As String, ByVal iValue As String, ByVal iPath As String)
        ' Schreiben in die INI durchführen
        Call WritePrivateProfileString(iSection, iKey, iValue, iPath)
    End Sub

    Public Sub DeleteKey(ByVal iSection As String, ByVal iKey As String, ByVal iPath As String)
        ' Löschen des Schlüssels durch eine Schreiboperation durchführen
        Call WritePrivateProfileString(iSection, iKey, Nothing, iPath)
    End Sub

    Public Sub DeleteSection(ByVal iSection As String, ByVal iPath As String)
        Call DeletePrivateProfileSection(iSection, 0, 0, iPath)
    End Sub



mit dieser funktion kannst du das ganze testen.

Code:
Sub test()
   
    Dim PathToINIFile As String
    ' Pfad zur INI Datei angeben
    PathToINIFile = "C:\test.ini"
   
    ' Wert in INI schreiben
    Call M_RW_INI.WriteValue("MeineSektion", "MeinKey", "MeinWert", PathToINIFile)
   
    MsgBox "wert wurde geschrieben"
   
    ' Wert wieder auslesen
    Dim wert As String
    wert = M_RW_INI.ReadValue("MeineSektion", "MeinKey", PathToINIFile)
   
    MsgBox wert
   
End Sub

[Diese Nachricht wurde von meisterlumpi am 06. Sep. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

newmann
Mitglied



Sehen Sie sich das Profil von newmann an!   Senden Sie eine Private Message an newmann  Schreiben Sie einen Gästebucheintrag für newmann

Beiträge: 18
Registriert: 15.08.2011

erstellt am: 06. Sep. 2011 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
also mit der "ini-Datei" kenne ich mich nicht so aus habe daher deinen Code genommen den "stumpf" kopiert um den Test durchlaufen zulassen und bin gleich auf einen Fehler gelaufen ( Zeile:Call M_RW_INI.WriteValue("MeineSektion", "MeinKey", "MeinWert", PathToINIFile).
Wollte daher die Variante mit dem Array ausprobieren und bekomme die Zweite Zeile nicht ausgelesen.
Habe einen txt-File (z. b. mit 2.Zeilen)
1.Zeile: Test;100;250;Basis;
2.Zeile: Test;150;230; High;

";" soll die Trennung für den späteren Split sein

Quellcode:
Set datei = CATIA.FileSystem.GetFile(uName)
Set tstream = datei.OpenAsTextStream("ForReading")
 
    zeile = Split(tstream.ReadLine, ";")
    neu1 = zeile(0)
    neu2 = zeile(1)
    neu3 = zeile(2)
    neu4 = zeile(3)
    neu5 = zeile(4)
    neu6 = zeile(5)
    neu7 = zeile(6)
    neu8 = zeile(7)
in "neu5" läuft er dann auf einen Fehler ("out of range"), da er die zweite Zeile nicht ausliest. Muß ich hier den Inhalt der txt-Datei anders abfragen??
Wenn ich alles in einer Zeile schreibe liest er mir alles aus also hat er wohl ein Problem mit dem Zeilenumbruch, oder??

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

meisterlumpi
Mitglied



Sehen Sie sich das Profil von meisterlumpi an!   Senden Sie eine Private Message an meisterlumpi  Schreiben Sie einen Gästebucheintrag für meisterlumpi

Beiträge: 118
Registriert: 15.04.2011

Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64

erstellt am: 06. Sep. 2011 13:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für newmann 10 Unities + Antwort hilfreich

die zeile
Code:
PathToINIFile = "C:\test.ini"

musst du natürlich anpassen. falls du die datei C:\test.ini nicht anlegen darfst (weil du keine schreibrechte auf C:\ hast z.b.), dann wirds nicht funktionieren. das skript überprüft weder, ob man schreibrechte hat, noch ob die ini wirklich existiert (beim auslesen eines wertes).

eine fertige funktion zum auslesen bestimmter zeilen findest du hier http://www.vbarchiv.net/tipps/tipp_970-bestimmte-zeile-aus-einer-textdatei-auslesen.ht ml

du könntest bei dir mal versuchen die zeile

Code:
zeile = Split(tstream.ReadLine, ";")

durch
Code:
zeile = Split(tstream.ReadAll, ";")

zu ersetzen.

------------------
    NJ | Inoffizielle CATIA Hilfeseite | ???

[Diese Nachricht wurde von meisterlumpi am 06. Sep. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

newmann
Mitglied



Sehen Sie sich das Profil von newmann an!   Senden Sie eine Private Message an newmann  Schreiben Sie einen Gästebucheintrag für newmann

Beiträge: 18
Registriert: 15.08.2011

erstellt am: 07. Sep. 2011 08:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
die Variante mit dem ersetzen von "line" in "All" hat nicht geklappt.

Die g. Funktion ist super durchgelaufen (zeigt genau das was ich möchte) ich bekomme aber eine Fehlermeldung (objekt dequired) nach Ende des Funktionsdurchlaufes und Rückgabe an die "txtLine.Text" muß ich hier vorab erst eine Deklarierung durchführen??

Das mit der ini-Datei habe ich erstmal verdrängt (zu wenig Einblick wie das genau funktioniert).
Es scheint ja auch so als wenn das mit der Funktion fast klappen würde, daher würde ich erstmal die txt-Variante weiter verfolgen. Wenn das nichts wird werde ich mich wohl mit dem "ini-Thema" befassen (müssen).
Vielleicht kannst du mir ja bei der Fehlermeldung nach dem Funktionsende weiterhelfen.....

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

meisterlumpi
Mitglied



Sehen Sie sich das Profil von meisterlumpi an!   Senden Sie eine Private Message an meisterlumpi  Schreiben Sie einen Gästebucheintrag für meisterlumpi

Beiträge: 118
Registriert: 15.04.2011

Intel Core2 Quad Q6600 2.40 GHz | 4 GB RAM | Win7x64

erstellt am: 07. Sep. 2011 15:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für newmann 10 Unities + Antwort hilfreich

Das Element 'txtLine' musst du abändern. Mach dir einfach ne string variable und schreib die auszulesende Zeile da rein. Pfad anpassen nicht vergessen.
Gruß

Code:

Sub test()

    Dim Zeile as string

    Zeile = ReadLine("C:\.........\sample.txt", 1) ' <- PFAD ANPASSEN

    MsgBox Zeile

End Sub

' Bestimmte Zeile aus einer Textdatei lesen
Public Function ReadLine(ByVal sFile As String, _
  Optional ByVal nLine As Long = 1) As String

  Dim sLines() As String
  Dim oFSO As Object
  Dim oFile As Object

  ' Fehlerbehandlung aktivieren
  On Error GoTo ErrHandler

  ' Verweis auf das FileSystemObject erstellen
  Set oFSO = CreateObject("Scripting.FileSystemObject")

  ' Existiert die Datei überhaupt?
  If oFSO.FileExists(sFile) Then
    ' Datei öffnen
    Set oFile = oFSO.OpenTextFile(sFile)

    ' Alles lesen und in Array zerlegen
    sLines = Split(oFile.ReadAll, vbCrLf)

    ' Datei schließen
    oFile.Close

    Select Case Sgn(nLine)
      ' (nLine > 0)
      Case 1
        ' n-te Zeile von vorne beginnend
        ReadLine = sLines(nLine - 1)

      ' (nLine < 0)
      Case -1
        ' n-te Zeile von hinten beginnend
        ReadLine = sLines(UBound(sLines) + nLine + 1)
    End Select
  End If

ErrHandler:
  ' Objekte zerstören
  Set oFile = Nothing
  Set oFSO = Nothing
End Function


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

newmann
Mitglied



Sehen Sie sich das Profil von newmann an!   Senden Sie eine Private Message an newmann  Schreiben Sie einen Gästebucheintrag für newmann

Beiträge: 18
Registriert: 15.08.2011

erstellt am: 08. Sep. 2011 08:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

perfekt....so wollte ich es haben..
Danke für die Hilfe 

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz