mistergooglehupf
Goto Top

Via Vb Zeilen in einem Textdokument zählen

Das Ganze soll in Vb mit Visual Studio (Console Appliaction) gelöst werden.

Hallo zusammen

Meine Aufgabe:

- Die Anzahl Zeilen in einem Textdokument zu zählen und oben beim Text reinschreiben


Sprich es sollte nachher etwa so aussehen.

Meine Idee war es die Zeilen in ein String einzulesen und nachher irgendwie zu zählen, doch bei der Umsetzung klappt es noch nicht ganz.

Danke schon im voraus.

Gruss

Von Google

1769

TextTexTextTextTexTextTextTexTextTextTexTextTextTexTextTextTexText
TextTexTextTextTexTextTextTexTextTextTexTextTextTexTextTextTexText
TextTexTextTextTexTextTextTexTextTextTexTextTextTexTextTextTexText
TextTexTextTextTexTextTextTexTextTextTexTextTextTexTextTextTexText

Content-Key: 80034

Url: https://administrator.de/contentid/80034

Printed on: April 23, 2024 at 12:04 o'clock

Member: bastla
bastla Feb 06, 2008 at 13:54:44 (UTC)
Goto Top
Hallo MisterGoogleHupf!

Das würde ich etwa so anlegen:
Dim TestFile As String = "D:\Test.txt"  
Dim sr As IO.StreamReader = New IO.StreamReader(TestFile)
Dim Text() As String = Split(sr.ReadToEnd, vbCrLf) 'zeilenweise in Array einlesen  
sr.Close()

Dim sw As IO.StreamWriter = New IO.StreamWriter(TestFile)
sw.WriteLine(CStr(UBound(Text) + 1)) 'Zeilenanzahl schreiben  
sw.Write(Join(Text, vbCrLf)) 'Array schreiben  
sw.Close()
Je nachdem, ob die letzte Zeile mit CrLF endet, wäre ev noch das "+ 1" wegzulassen.

Grüße
bastla
Member: MisterGoogleHupf
MisterGoogleHupf Feb 07, 2008 at 09:42:49 (UTC)
Goto Top
Hallo Bastler,

danke für die schnelle Antwort!

Der Code sieht nicht schlecht aus und funktioniert auch demensprechend. Das Problem liegt nur noch bei der Ausgabe des Wertes. Die Anzahl Zeilen werden nicht in dem Textdokument ausgegeben ...

Grüsse

von Google
Member: bastla
bastla Feb 07, 2008 at 11:38:24 (UTC)
Goto Top
Hallo MisterGoogleHupf!

Die Anzahl Zeilen werden nicht in dem Textdokument ausgegeben ...
Kann ich nicht nachvollziehen - ich habe zum Test den geposteten Code in die Datei "D:\Test.txt" geschrieben - nach zweimaligem Starten als "Sub Main" einer VB2005Express-Konsolenanwendung (direkt aus der IDE) sieht der Dateiinhalt so aus:
10
9
Dim TestFile As String = "D:\Test.txt"  
Dim sr As IO.StreamReader = New IO.StreamReader(TestFile)
Dim Text() As String = Split(sr.ReadToEnd, vbCrLf) 'zeilenweise in Array einlesen  
sr.Close()

Dim sw As IO.StreamWriter = New IO.StreamWriter(TestFile)
sw.WriteLine(CStr(UBound(Text) + 1)) 'Zeilenanzahl schreiben  
sw.Write(Join(Text, vbCrLf)) 'Array schreiben  
sw.Close()

Grüße
bastla
Member: MisterGoogleHupf
MisterGoogleHupf Feb 08, 2008 at 08:41:17 (UTC)
Goto Top
Hallo Bastla

ich werde mal den ganzen Code posten,da es vieleicht daran liegen könnte ... :D


Imports System.IO
Imports System.Text

Module Module1

Sub Main()

'Bestimmen und deklarieren der Variablen
Dim objStreamWriter As StreamWriter
Dim Dateiinhalt As String
Dim Datum As String = Today
Dim Zeit As String = Now


'Einlesen der Datei
Dateiinhalt = My.Computer.FileSystem.ReadAllText("pfad1 (Quelldatei)")

'Ersetzen des Teilstrings , durch ein Leerschlag
Dateiinhalt = Replace(Dateiinhalt, ",", " ")

'Erstellen der Datei im Texteditor
objStreamWriter = New StreamWriter("pfad2 (Ausgangsdatei)")

Dim File As String = "pfad1 (Quelldatei)"
Dim sr As IO.StreamReader = New IO.StreamReader(File)
Dim Text() As String = Split(sr.ReadToEnd, vbCrLf) 'zeilenweise in Array einlesen
sr.Close()

Dim sw As IO.StreamWriter = New IO.StreamWriter(File)
sw.WriteLine(CStr(UBound(Text) + 1)) 'Zeilenanzahl schreiben
sw.Write(Join(Text, vbCrLf)) 'Array schreiben
sw.Close()


'Einfügen von Komponenten für die Headzeile
objStreamWriter.Write("00" & vbTab & "OS1" & vbTab & Datum & Zeit & " " & vbTab & "PRO" & (Hier soll nachher die Zeilenanzahl ausgegeben werden) & vbNewLine)

'Einfügen des Strings "Dateiinhalt" in die Datei
objStreamWriter.Write(Dateiinhalt)

'Schliessen der Datei
objStreamWriter.Close()

End Sub


Wenns mir recht ist hat mein Kollege "EsstMehrBiberSchuetztdenWald" auch schon hier sein Senf abgegeben. face-smile

Danke für die Mühe die du hier reinsteckst, dazu ein ganz fettes Lob!

grüsse

MGH
Member: bastla
bastla Feb 08, 2008 at 16:12:25 (UTC)
Goto Top
Hallo MisterGoogleHup!

Das ist ja eine recht interessante Mischung geworden ...

... aber vielleicht solltest Du es doch auf das Nötigste beschränken:
Imports System.IO
Imports System.Text

Module Module1

    Sub Main()

        'Bestimmen und deklarieren der Variablen  
        Dim objStreamWriter As StreamWriter
        Dim Dateiinhalt As String
        Dim Datum As String = Today
        Dim Zeit As String = Now
        Dim FileIn As String = "pfad1 (Quelldatei)"  
        Dim FileOut As String = "pfad2 (Ausgangsdatei)"  

        'Einlesen der Datei  
        Dateiinhalt = My.Computer.FileSystem.ReadAllText(FileIn)

        'Ersetzen des Teilstrings , durch ein Leerschlag  
        Dateiinhalt = Replace(Dateiinhalt, ",", " ")  

        'Zählen der Zeilen  
        Dim Text() As String = Split(Dateiinhalt, vbCrLf) 'Dateiinhalt zeilenweise in Array einlesen ...  
        Dim Zeilenanzahl As Long = UBound(Text) + 1 '... und die Zeilenanzahl aus dem höchsten Index ermitteln  

        'Erstellen der Datei  
        objStreamWriter = New StreamWriter(FileOut)

        'Einfügen von Komponenten für die Headzeile  
        objStreamWriter.WriteLine("00" & vbTab & "OS1" & vbTab & Datum & Zeit & " " & vbTab & "PRO" & CStr(Zeilenanzahl))  

        'Einfügen des Strings "Dateiinhalt" in die Datei  
        objStreamWriter.Write(Dateiinhalt)

        'Schliessen der Datei  
        objStreamWriter.Close()

    End Sub
End Module
Anmerkungen:
  • Aus Gründen der Übersichtlichkeit habe ich die beiden Dateinamen bereits im Deklarationsblock festgelegt.
  • Die Verwendung von ".WriteLine" erspart das Hinzufügen eines "vbNewLine" am Ende der Zeile.

Grüße
bastla
Member: MisterGoogleHupf
MisterGoogleHupf Feb 12, 2008 at 10:00:59 (UTC)
Goto Top
Hallo Bastla ..

Danke es klappt schon ganz gut ... ausser das es mir oben folgendes ausgibt .. :D

00 OS1 12.02.200812.02.2008 10:59:13 PRO 728
727
726
(Formatierter Text) (Formatierter Text) (Formatierter Text) (Formatierter Text)
(Formatierter Text) (Formatierter Text) (Formatierter Text) (Formatierter Text)
(Formatierter Text) (Formatierter Text) (Formatierter Text) (Formatierter Text)

Ich schaue mal vieleicht kann ich das mit den Zahlen 726 und 727 auch selber beheben .. :D

Danke nochmals für deine antwort

grüsse

MGH
Member: bastla
bastla Feb 12, 2008 at 21:32:48 (UTC)
Goto Top
Hallo MisterGoogleHupf!

Meine Interpretation: 726 und 727 können eigentlich nur aus zwei früheren Testläufen mit der ersten Version von oben stammen (da wurde nur die Zeilenanzahl in die Datei geschrieben) - wenn Du die ersten 3 Zeilen erntfernst, solltest Du den ursprünglichen Text erhalten, und nach einem neuerlichen Durchlauf des Programmes dürfte dann auch nur die neue Kopfzeile (mit Zeilenanzahl 726) aufscheinen ...

Grüße
bastla
Member: Viper747
Viper747 Jun 23, 2015 updated at 10:10:36 (UTC)
Goto Top
Hallo,
dieses Thema ist zwar schon was älter, aber es gibt immer wieder Leute die das suchen.
Wie wäre es mit diesem 1-Zeiler?

Dim s$() = System.IO.File.ReadAllLines("D:\TEST.txt", System.Text.ASCIIEncoding.Default)

'Anschließend könnte man das Ergebnis wieder in die Datei schreiben:

System.IO.File.WriteAllText("D:\TEST.txt", s.Count.ToString + vbCrLf+vbCrLf, System.Text.ASCIIEncoding.Default)
System.IO.File.AppendAllLines("D:\TEST.txt", s, System.Text.ASCIIEncoding.Default)


Gruß
Viper747