vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Find & Replace in String 
Autor: stefanbla80
Datum: 01.06.17 20:17

Hallo zusammen,

Ich habe einen String, z. B. TestString = "WO2017-05-01;CM2017-03-01;TT2017-01-01".
Nun würde ich gerne z. B. das hinter "CM" stehende Datum ersetzen - z. B. auf das heutige Datum.

Habt Ihr hier Ansätze, z. B. mit Offsets usw.

Stehe irgendwie auf dem Schlauch

Grüße
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Find & Replace in String 
Autor: effeff
Datum: 01.06.17 22:03

Wenn das Datum immer an letzter Stelle steht, brauchst Du doch nur den entsprechenden Substring ersetzen...

Oder Du splittest den String mit dem Semikolon als Trennzeichen, ersetzt aus dem resultierenden Array den Teil mit dem Index 1 durch das entsprechend formatierte heutige Datum und fügst dann alles wieder zusammen.

Methode 1:
Dim TestString As String = "WO2017-05-01;CM2017-03-01;TT2017-01-01"
 
Dim aktDate = Format(Now.Date, "yyyy-MM-dd")
 
Dim ErgebnisString As String = TestString.Substring(0, 15) & aktDate & _
  TestString.Substring(25, 13)
 
'oder besser: Dim ErgebnisString As String = String.Concat(TestString.Substring( 
' 0, 15), aktDate, TestString.Substring(25, 13))
 
MessageBox.Show(ErgebnisString)
Methode 2:
Dim TestString As String = "WO2017-05-01;CM2017-03-01;TT2017-01-01"
 
Dim arr() As String = TestString.Split(";")
 
Dim aktDate = Format(Now.Date, "yyyy-MM-dd")
 
Dim Ergebnisstring As String = arr(0) & ";CM" & aktDate & ";" & arr(2)
 
'oder besser: Dim Ergebnisstring As String = String.Concat(arr(0), ";CM", 
' aktDate, ";", arr(2))
 
MessageBox.Show(Ergebnisstring)
Daneben könntest Du noch mit Regulären Ausdrücken arbeiten...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Find & Replace in String 
Autor: stefanbla80
Datum: 21.07.17 13:51

Hallo effeff,

und vielen Dank für Deine Antwort - ist schon wirklich längere Zeit her, komme einfach nicht dazu ...

Vielleicht vorne weg eine generelle Frage:
Ich habe eine ComboBox. In dieser stehen verschiedenen "Statusmeldungen".
z. B.: - in Arbeit
- Angebot versendet
- Rückfragen
- ...

Ich würde gerne diese Meldungen "mittracken". Also heiß: Ich wähle in der Box "in Arbeit" aus, und schreibe mir somit das Datum "weg". Also eine Art "Historie".
Jetzt kann es natürlich sein, dass ich immer wieder mal einige Statusmeldungen während der Projektzeit mehrfach brauche.

Meine Frage: Wie könnte ich das am Besten "wegschreiben" um nachher auch wieder eine Art Auswertung fahren zu können. Dachte jetzt anfangs an einen "String" wie oben beschrieben. Jedoch überschreibe ich ja dann diese Einträge wieder.

Grüße
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Find & Replace in String 
Autor: effeff
Datum: 21.07.17 15:18

Du willst also jedesmal, wenn in der ComboBox eine neue Auswahl getroffen wird, die Auswahl zusammen mit dem aktuellen Datum und ggf. der aktuellen Zeit, loggen und nachher dann auch noch schnell und bequem auswerten?

Dazu würde ich eine Datenbank nehmen, z. B. https://msdn.microsoft.com/de-de/library/ms172599%28v=vs.90%29.aspx oder einfach eine Access MDB.

Alternativ steht Dir natürlich auch eine Textdatei zur Verfügung, an die Du jedesmal einfach nur eine Zeile anhängst. Dann würde ich aber lieber für jeden Tag eine eigene Datei erstellen lassen, sonst wird die Datei zu groß, zu behäbig und die Auswertung dauert länger.

Du kannst auch in eine Data- oder Hashtable schreiben und beim Beenden des Programmes die Daten in eine Excel-Datei übertragen (auch da würde ich für jeden Tag eine eigene Datei erstellen lassen).

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Klasse für die Serialisierung von Meldungen 
Autor: Manfred X
Datum: 21.07.17 21:54

Eine Klasse für die Serialisierung von Meldungen:
<Serializable()> _
Public Class Spion
    Implements IDisposable
 
    <Serializable()> _
    Public Class SpionItem
 
        Public ReadOnly ComboItem As String
        Public ReadOnly DatumZeit As DateTime
        'weitere Info-Properties z.B. Benutzer 
 
        Public Sub New(ComboText As String, dt As DateTime)
            ComboItem = ComboText
            DatumZeit = dt
        End Sub
    End Class
 
    Private SpionDatei As String
 
    Private ReadOnly SpionItemList As New List(Of SpionItem)
 
    <NonSerialized()> _
    Dim fmt As New System.Runtime.Serialization.Formatters. _
        Binary.BinaryFormatter()
 
    Public Sub New(SpionDateiPfad As String)
       If IO.File.Exists(SpionDateiPfad) Then
          Using fs As New IO.FileStream(SpionDateiPfad, _
             IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
             Dim cs As Spion = DirectCast(fmt.Deserialize(fs), Spion)
             Me.SpionItemList = cs.SpionItemList
          End Using
       End If
       SpionDatei = SpionDateiPfad
    End Sub
 
 
    Public Sub addItem(Combotext As String, dt As DateTime)
        SpionItemList.Add(New SpionItem(Combotext, dt))
    End Sub
 
 
    Public ReadOnly Property GetList As DataTable
        Get
            Dim dt As New DataTable
            dt.Columns.Add("ComboItem") : dt.Columns.Add("DatumZeit")
            With SpionItemList
                For i As Integer = 0 To .Count - 1
                    dt.Rows.Add(.Item(i).ComboItem, .Item(i).DatumZeit)
                Next i
            End With
 
            Return dt
        End Get
    End Property
 
 
    Public Sub Serialize()
        IO.File.Delete(SpionDatei)
        Try
            Using fs As New IO.FileStream(SpionDatei, _
                IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.None)
                fmt.Serialize(fs, Me)
            End Using
        Catch ex As Exception
            Stop
        End Try
    End Sub
 
    Private disposedValue As Boolean
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                Serialize()
            End If
        End If
        Me.disposedValue = True
    End Sub
 
    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
End Class
Einbau der Klasse in eine Combobox-Ableitung:
Public Class ComboBoxSpion
    Inherits ComboBox
 
    Dim sp As New Spion("C:\Daten\ComboboxSpionage.ser")
 
    Protected Overrides Sub OnSelectedIndexChanged(e As System.EventArgs)
        MyBase.OnSelectedIndexChanged(e)
        sp.addItem(DirectCast(Me.Items(Me.SelectedIndex), String), Now)
    End Sub
 
    Public ReadOnly Property GetSpionItems() As DataTable
        Get
            Return sp.GetList
        End Get
    End Property
 
    Private Sub ComboBoxSpion_Disposed(sender As Object, _
        e As System.EventArgs) Handles Me.Disposed
        sp.Serialize()
    End Sub
End Class
Formular: Anwendungsbeispiel
Public Class frmComboBoxSpion
 
    Dim cbo As New ComboBoxSpion With _
        {.Parent = Me, .Width = 200, .Height = 50}
    Dim dt As DataTable
    Dim bs As New BindingSource
    Dim dgv As New DataGridView With _
        {.Parent = Me, .Width = 200, .Height = 200, _
         .Top = 110, .DataSource = bs}
    Dim WithEvents btn As New Button With _
        {.Parent = Me, .Width = 200, .Top = 80, _
         .Text = "Items zeigen"}
 
    Private Sub frmComboBoxSpion_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
        cbo.Items.AddRange({"Projekt Müller", "Angebot Meier", _
                            "Rechnung Schröder", "Projekt Buchs"})
    End Sub
 
 
    Private Sub btn_Click(sender As Object, _
        e As System.EventArgs) Handles btn.Click
 
        bs.DataSource = cbo.GetSpionItems
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel