Laden...

File.DeleteLine[] - Methode??

Erstellt von Ghosti vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.725 Views
G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren
File.DeleteLine[] - Methode??

Hallo,

bei File gibt es eine ReadAllLines Methode das alles in ein Array einliest.

Ich suche im momment nach deiner File.DeleteLine[] - Methode, die mir exact den String löscht der sich in der angegebenen Zeile befindet.

Gibt es zufällig so eine Methode die das kann?

Falls nicht, was wäre die beste lösung für sowas???

Die Datei zu öffnen und dort dann nach dem String zu suchen ist ja bisl umständlich.

thx

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Ghosti,

Gibt es zufällig so eine Methode die das kann?

nein

Die Datei zu öffnen und dort dann nach dem String zu suchen ist ja bisl umständlich.

warum?

herbivore

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

Warum..

weil ich die genau Position des String durch den Line-Index schon habe.
D.h. wenn es so eine Methode geben würde müsste ich die Datei nur öffnen und den "index löschen".

Jetzt brauch ich eben 1-2 Schritte mehr, deshalb ist es umständlicher.
Muß jetzt den Text durchsuchen 🙂

danke herbivore

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Ghosti,

wenn du den Index schon hast, brauchst du den Text natürlich nicht zu durchsuchen.

herbivore

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

@herbivore

darauf wollte ich ja hinaus.

Wie lösche ich jetzt aber am besten die Zeile im Text mit hilfe des indexes??

eine DeleteLine[]-Methode gibt es ja nicht, der ich den index übergeben kann.

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo Ghosti,

eine solche Methode kann es nicht geben, weil ReadAllLines ein Array liefert; und Arrays sind - zumindest im Hinblick auf die Anzahl der Elemente - unveränderlich. Du kannst aber einen Umweg gehen:*Erstelle eine **ArrayList **aus dem vorhandenen Array. *Lösche die Zeile mit Remove(index). *Kopiere die ArrayList mit **CopyTo **zurück in ein (festes) Array. *Speichere dieses Array wieder per WriteAllLines.

Ob dieser Weg vernünftig ist, hängt von der Gesamtstruktur der Daten und der Häufigkeit des Löschens ab. Schließlich wird dabei viel hin- und herkopiert. Jürgen

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

@juetho

Das mit dem Array hab ich einfacher lösen können. Dazu hat mir die Array.Clear geholfen, das funktioniert.

Jedoch muß ich den Inhalt der sich an der Stelle im Array befindet auch in einer Datei ändern.

Die Datei habe ich deswegen auch Zeilenweise aufgebaut. Somit kann ich sie auch super mit ReadAllLines lesen.

Deswegen habe ich auch gefragt ob es vielleicht irgendwo eine DeleteLine[]-Methode gibt.

Mir geht es im momment nur um eine möglichst effiziente Lösung, den richtigen Abschnitt in der Datei zu löschen. Ich hab gehofft das ich das löschen mit hilfe des Indexes realisieren kann. Das scheint allerdings wohl nicht zu gehen.

Somit muß ich die Datei jetzt nach dem Begriff zuerst durchsuchen und ab der gefundenen stelle eine bestimmte länge löschen

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren
Array-Index "entfernen"?

Hallo,

lässt sich aus einem Array eine bestimmte Position(Index) ganz entfernen?

Beispiel:

Original Array:

0 1 2 3
a b c d

Beispiel Code: RemoveIndex(1);

0 1 2
a c d

Ich möchte das nicht nur der Inhalt entfernt wird, sondern auch das alles darauffolgende aufgerückt wird.

Ist das möglich?

2.760 Beiträge seit 2006
vor 16 Jahren

Wenn es dir nicht um die Speichereffizienz auf der Platte geht und du der einzige bist der mit dem File arbeitet oder die anderen Anwendung damit zurechtkommen, kannst du auch fixed lenght strings in deinem File benutzen.
Wenn du das tust und das Encoding deines Files kennst kannst du die Länge einer Zeile (in byte) bestimmen und mit Stream.Seek() zu der Stelle springen und die bytes raushauen/austauschen.
Wenn die länge der Zeilen sich ändern können soll dann kannst du am Anfang initial bis zu einem /r bzw. /r/n lesen und hast dann automatisch die länge aller Zeilen im File.
Wenn dein File groß ist dann gewinnst du damit sicher (vergleichsweise) massig an performance und verlierst (vergleichsweise) massig Festplattenspeicher 😉

G
15 Beiträge seit 2007
vor 16 Jahren

Prinzipiell schon, wobei natürlich die Größe des Arrays nicht verkleinert werden kann und deswegen der "frei" gewordene Index mit einem Standardwert befüllt werden muss damit man ihn als "frei" erkennen kann.
Die Frage ist, ist das ganze sinnvoll? Eher nicht. Mit einer generischen List wärst du wesentlich besser bedient. Diese bietet nämlich unter anderem genau diese Funktionalität (List.RemoveAt(index)).

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

Den Festplattenspeicher von nem User kann ich nicht beeinflussen, somit lass ich das.

Im momment muß ich das file 1 mal in ein array einlesen, sollten jetzt änderungen passieren (das sollte nicht oft vorkommen eigentlich) dann wird das ganze in dem Array geändert und das alte file wird überschrieben.

Hab allerding im momment nur ein kleines problem mit möglichen Leerzeielen 🙂

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

Ich hab in der MSDN schon etwas über die Ilist Schnittstelle mit der List.RemoveAt gelesen, war mir da nur nicht sicher ob mir das helfen könnte.

Wenn ich List verwende dann brauch ich das ganze nicht mehr in ein Array einzulesen oder täusch ich mich da jetzt??

139 Beiträge seit 2006
vor 16 Jahren

Nein brauchst du nciht. Schau dir nochmal die MEmbers von einer List (nicht IList) an. Da siehste, wie die funktioniert.

Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen

110 Beiträge seit 2008
vor 16 Jahren

Wenn du Probleme mit Leerzeilen hast, dann könntest du vor dem "in-die-Datei-schreiben" den Array in einen anderen ohne die Leerzeilen kopieren.

Grüße, Aurion

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

@TNDAri

Bei List finde ich aber keine RemoveAt-Methode nur bei IList.

Im momment hänge ich noch in der Luft.

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo,

man muss schon genau lesen und schreiben:

Mit einer generischen List wärst du wesentlich besser bedient.

Die "generische List" wird nicht als List, sondern als **List<T> **bezeichnet. Dafür gibt es auch die List<T>.RemoveAt-Methode.

Die Eingangsfrage:

lässt sich aus einem Array eine bestimmte Position(Index) ganz entfernen?

hatte ich doch gestern unter
File.DeleteLine[] - Methode??
beantwortet:

Arrays sind - zumindest im Hinblick auf die Anzahl der Elemente - unveränderlich.

Auch wenn Du Dir dort anders beholfen hast, gilt diese Aussage: Arrays sind grundsätzlich unveränderlich; ArrayList oder List<T> sind flexibel.

Jürgen

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

@juetho

Ich habe die Generic List jetzt mal verwendet.

Wie kann ich aber jetzt den Inhalt der List in eine Datei schreiben?

File.WriteAllLines(Dateiname, die liste (wie muss ich sie hier eingben?), Encoding);

J
3.331 Beiträge seit 2006
vor 16 Jahren

Wie kann ich aber jetzt den Inhalt der List in eine Datei schreiben?

File.WriteAllLines(Dateiname, die liste (wie muss ich sie hier eingben?), Encoding); File.WriteAllLines erwartet ein String-Array. Also benötigst Du (wie ich es in der anderen Diskussion skizziert hatte) eine Konvertierung von List<string> nach string[]. Dazu gibt es die generelle Empfehlung:

Schau doch selbst in die :rtfm: **:::

Kopiert die gesamte List in ein kompatibles eindimensionales Array,
oder:
Kopiert die Elemente der List in ein neues Array.

Traust Du Dir zu, eine dieser Methoden selbst zu finden? Jürgen

G
Ghosti Themenstarter:in
150 Beiträge seit 2007
vor 16 Jahren

@juetho

ich wollte mit der Convert-Methode das ganze in ein Array konvertieren (habe verschiedene Arrays). Damit hatte ich meine Probleme. Muß gestehen das ich die normale Copy-Methode übersehen habe.

Danke

PS: hab sie gefunden 🙂

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Ghosti,

nicht zu einem Thema zwei Threads öffnen ==> zusammengefügt.

herbivore