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
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
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
Hallo Ghosti,
wenn du den Index schon hast, brauchst du den Text natürlich nicht zu durchsuchen.
herbivore
@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.
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
@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
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?
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 😉
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)).
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 🙂
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??
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
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
@TNDAri
Bei List finde ich aber keine RemoveAt-Methode nur bei IList.
Im momment hänge ich noch in der Luft.
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
@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);
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
@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 🙂
Hallo Ghosti,
nicht zu einem Thema zwei Threads öffnen ==> zusammengefügt.
herbivore