ERLEDIGT
JA
JA
ANTWORTEN
16
16
ZUGRIFFE
3703
3703
EMPFEHLEN
-
Hallo,
Ich möchte gerne eine Fetse Zeile (die Zeilen Zahl wird von einen Programm gesetzt) Löschen.
Wie kann man das ambesten machen mit dem StreamWriter?
Grüße und Danke
PS: Frohe Ostern!
-
Hi,
Hat wirklich keiner eine Idee wie man dies bewekstelligen kann?
Grüße
-
Hallo Fridulin!
Ein Ansatz:
1. Mit StreamReader alle Zeilen in string - Array auslesen ("foreach" - Schleife)
2. Gewünschte Zeile löschen
3. String - Array mit StreamWriter in Datei (über-)schreibenSo einfach wie möglich. Aber nicht einfacher!
Albert Einstein
-
so, bitte sehr:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public void DeleteRowFromFile(String Filename, int Row) { int i = 1; string line = null; StringBuilder sb = null; using( StreamReader sr = new StreamReader(new FileStream(Filename, FileMode.Open)) ) { sb = new StringBuilder((int)sr.BaseStream.Length); while( (line = sr.ReadLine()) != null ) if( Row != i++ ) sb.Append(line).Append(Environment.NewLine); } using( StreamWriter sw = new StreamWriter(new FileStream(Filename, FileMode.Create)) ) sw.Write(sb.ToString()); }
-
Hallo,
vielen Dank erstmal euch beiden, ich war gestern Nachmittag nicht mehr im Netz deswegen konnte ich da deines noch nicht lesen Caracho, ich habe es denn selber folgendermaßen gelößt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[color=#ff0000]void [/color][b][color=#191970]neuabspeichern[/color][/b][color=#191970][/color][color=#006400]([/color][color=#ff0000]string [/color][color=#006400][] [/color]arrZeilen[color=#006400], [/color][b][color=#ff0000]int [/color][/b][color=#ff0000][/color]auswahl[color=#006400])[/color] [color=#006400]{[/color] StreamWriter sw [color=#006400]= [/color][b][color=#008b8b]new [/color][color=#191970]StreamWriter[/color][/b][color=#191970][/color][color=#006400]([/color]Application[color=#006400].[/color]StartupPath [color=#006400]+ [/color][color=#ff00ff]"\" [/color][color=#006400]+ [/color][color=#ff00ff]"speicher.txt"[/color][color=#006400], [/color] [b][color=#008b8b]alse[/color][/b][color=#008b8b][/color][color=#006400]);[/color] [b][color=#ff0000]int [/color][/b][color=#ff0000][/color]wieviele [color=#006400]= [/color]inhalt[color=#006400].[/color]Items[color=#006400].[/color]Count[color=#006400];[/color] [b][color=#ff0000]int [/color][/b][color=#ff0000][/color]i [color=#006400]= [/color][color=#00008b]0[/color][color=#006400];[/color] [b][color=#0000ff]while [/color][/b][color=#0000ff][/color][color=#006400]([/color]i [color=#006400]< [/color]wieviele[color=#006400])[/color] [color=#006400]{[/color] [b][color=#0000ff]if [/color][/b][color=#0000ff][/color][color=#006400]([/color]i [color=#006400]!= [/color]auswahl[color=#006400])[/color] [color=#006400]{[/color] sw[color=#006400].[/color][b][color=#191970]WriteLine[/color][/b][color=#191970][/color][color=#006400]([/color]arrZeilen[color=#006400][[/color]i[color=#006400]]); [/color] [color=#006400]}[/color] i[color=#006400]++;[/color] [color=#006400]} [/color]sw[color=#006400].[/color][b][color=#191970]Close[/color][/b][color=#191970][/color][color=#006400]();[/color] [color=#006400][/color]
Die Variable auswahl ist das Item welches ich Ausgewählt habe in der ListBox, mit folgendem Code wird es gesetzt:
Code :1
Code :1 2
[color=black]auswahl = inhalt.SelectedIndex;[/color] [color=black][/color]
Also vielen Dank nochmal für eure Hilfe!
Grüße
-
Hallo Leute,
ich habe diesen Thread noch einmal "ausgegraben" da der gepostete Code zwar funktioniert, aber leider nicht immer. Ich lasse in einer anderen Schleife eine Textdatei auslesen und sobald dort etwas übereinschtimmt, wird die Funktion aufgerufen. Leider löscht der Code immer nur ein paar Zeilen. Ich habe die Vermutung, daß die Funktion zu schnell von der anderen Schleife aufgerufen wird und deswegen klappt es nicht. Aber es ist nur eine wage Vermutung.
Wenn jemand eine Idee hat, oder ein ganz anderen Weg weiß wie man eine vordefinierte Zeile einer Textdatei löschen kann, würde ich mich sehr freuen wenn ihr dies Postet.
Viele Grüße und eine gute Nacht wünsche ich
Fridulin
PS: Ich habe Caracho's Funktion gebommen.
-
Zwar keine schöne Lösung, aber im Anhang findest einen entsprechenden Anhaltspunkt
-
Hallo,
vielen Dank für das Programm, der Programmtext funktioniert wunderbar.
Viele Grüße und vielen dank noch einmal
Fridulin
-
Hi,
mißt, da habe ich mich zufrüh gefereut. Ich habe dein Beispiel nocheinmal genauer Testen können. Auch dein Beispiel funktioniert leider auch nicht richtig.
Merkwürdigerweise um so mehr Zeilen er löschen soll um so mehr löscht er auch, aber wenn er nur 2 löschen soll, dann löscht er nur eine Zeile. Ein Fehler gibt er aber auch nicht aus. Beim nächsten Programm durchlauf löscht er die Zeile auch, die er beim ersten Durchlauf nicht gelöscht hat.
Der Aufruf der Funktion funktioniert Tadelos, das habe ich mehrfach getestet.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
void zeileloeschen (int zeile) { int count = 0; count = zeile; //MessageBox.Show(count + ""); << Nur zum Testen des Aufrufes. int currCount = 0; string s = null; try{ if (count >= 0) { StringBuilder sb = new StringBuilder(); StreamReader sr = new StreamReader("anwesende.txt"); while ( ( s = sr.ReadLine()) != null) { if (currCount != count) { sb.Append(s + System.Environment.NewLine); } currCount++; } sr.Close(); StreamWriter sw = new StreamWriter("anwesende.txt"); sw.Write(sb.ToString()); sw.Close(); } } catch{ status.Text = "Fehler beim löschen in der Anwesenheitsliste"; string waslos = "Fehler beim löschen in der Anwesenheitsliste"; string loginname = null; string loginpasswort = null; string loginip = null; log(loginname, loginpasswort, loginip, waslos); } }
Vielleicht hat ja jemand noch eine Idee, wie man das lösen könnte.
Viele Grüße und vielen Dank im Voraus.
Fridulin
---Edit:
Ich habe den Fehler nun gefunden. Sobald ich am Anfang der Datei eine Zeile löschen möchte und am ende, sowie dazwischen viele andere Zeilen sind, löscht er beide Zeilen wunderbar. Sobald die Zeilen dichter zusammen sind tut er dies nicht, also kann es nur daran liegen, daß der Funktionsaufruf zu schnell ist.
Falls jemand eine Idee hat wie man dies Lösen kann, wäre ich sehr Dankbar wenn er es hier postet.
Viele Grüße und vielen dank
FridulinGeändert von Fridulin (01.09.06 um 16:44 Uhr)
-
Achtung, mein Testprogramm löscht eine Anzahl von Zeilen am Beginn einer Datei, nicht eine bestimmte Zeile. Das müsstest du entsprechend anpassen und sollte ansich auch kein Problem darstellen. Musst ja nur die Zeilen mitzählen ...
-
Hallo,
tut mir leid das meine Antwort so lange auf sich warten gelassen hat. Ich habe es natürlich umgeschrieben, sodas nur eine Zeile gelöscht wird. Was das Programm auch tut, nur wenn ich die Funktion öfters hintereinander aufrufe (was wohl zu schnell geht), löscht es nicht mehr alle Zeilen. (wobei pro Funktionsaufruf nur eine Zeile gelöscht werden soll.
Viele Grüße und vielen Dank
Fridulin
-
Also, ich würde die Funktion nicht öfter hintereinander aufrufen, weil dies durch das ständige Öffnen der Datei nicht wirklich performant wäre. Schreib dir die zu löschenden Zeilennummern in eine Collection und lösch es in einem Durchlauf. Wie du sowas machen kannst, hat mein kleines Demo-Tool gezeigt. Das anzupassen sollte wirklich kein Problem sein.
-
Hallo,
nagut im meinen Programm wird vermutlich die Funktion 1 bis 2 mal hintereinander aufgerufen. Ich habe es öfters nur zu Testzwecken aufgerufen. Im normal Betrieb, sollte dies aber nicht geschriehen. Allerdings funktioniert es schon bei 2 Zeilen nicht mehr.
Danke für die Informationen bezüglich einer Collecion. Ich binn noch am überlegen, ob es so löse oder ganz die Datei weglasse und es alles in ein Array zwischenspeichere und bearbeite.
Viele Grüße und vielen Dank für deine Hilfe
Fridulin
-
Naja, ich weiß jetzt mittlerweile auch nicht mehr genau wo das Problem liegt: Laut dem letzten Sourcecode-Auszug den du gepostet hast, löscht er ja noch immer n Zeilen von Beginn der Datei an. Das ist ja nicht was du willst? Daher wirst du die Methode umschreiben müssen.
-
Hallo,
merkwürdigerkeise tut der Source Code das aber, ich sehe ehrlich gesagt auch nicht warum er immer ab der ersten Zeile löschen soll.
Die Funktion bekommt die Int Variable "zeile" übergeben, wobei die "count" Variable mit "zeile" gleichgesetzt wird. Dann liest er die Zeilen ein in der while Schleife, esseiden "currCount != count" wobei count die Zeile entspricht, dann schreibt er es nicht in "sb" rein. Später schreibt er alles wieder zurück was in "sb" steht in die Datei. Oder habe ich jetzt einen Denkfehler?
Viele Grüße
traumpaar
Ähnliche Themen
-
.dat Datei einzelne Zeile löschen
Von MopsdeBops im Forum JavaAntworten: 0Letzter Beitrag: 10.01.09, 13:14 -
Zeile aus einer Datei löschen
Von RipdEaTh im Forum JavaAntworten: 0Letzter Beitrag: 20.11.06, 12:15 -
Zeile aus Datei löschen
Von fiacyberz im Forum PHPAntworten: 12Letzter Beitrag: 24.11.02, 11:07 -
Erste Zeile einer Datei löschen...
Von Warper im Forum PHPAntworten: 1Letzter Beitrag: 30.04.02, 16:27 -
n-te zeile aus einer txt datei löschen
Von Nucleus im Forum PHPAntworten: 9Letzter Beitrag: 09.03.02, 00:00





Zitieren
Login





