Erstmal vielen Dank an alle... Habe bis jetzt immer über bestehende Threads geschafft meine Probleme zu lösen. Dennoch weiß ich nicht warum meine suche mit Endswith nicht Funktioniert.
Ich bekomme eine Datei in der in manchen Zeilen ein PDF Dokument enthalten ist (Pfad.Extention).
Nun möchte ich nur die Zeilen ausgeben welche mit der Endung .pdf enden (das ganze natürlich case insensitive).
Ich weiß leider nicht wo der fehler ist...
Es wird keine Datei erzeugt. Ich habe davor einen Durchlauf mit Leerzeilensuche, dieser Funktioniert problemlos (hab ich auch hier aus dem Forum)
Danke schon mal
StreamReader srDescription = new StreamReader(sDokulisteFullFilenameBlankline);
string sSearchExtension = ".pdf";
string sDescription = "";
bool bDescription = false;
ArrayList arrDescription = new ArrayList();
while (sDescription != null)
{
sDescription = srDescription.ReadLine();
if (sDescription.EndsWith(sSearchExtension))
arrDescription.Add(sDescription);
}
srBlankLine.Close();
foreach (string sDescriptionOut in arrDescription) ;
// Speichern
System.IO.StreamWriter swDescription = new System.IO.StreamWriter(sDokulisteFullFilenameDescription, false, System.Text.Encoding.Default);
for (int i = 0; i < arrDescription.Count; i++)
swDescription.WriteLine((string)arrDescription[i]);
swDescription.Close();
Mögliche Fehler:
*Die Pfade enden mit .PDF statt .PDF
*Bei ReadLine() wird als letztes Zeichen der Zeilenumbruch geliefert und nicht das f von .pdf.
Deine Zeile
foreach (string sDescriptionOut in arrDescription) ;
kannst du übrigens rauswerfen.
There are 10 kind of people, those who understand binary and those who don't.
Verbesserungsvorschlag: Benutze File.ReadAllLines; dann stehen alle Zeilen für sich in einem Array und du sparst dir das Fummeln mit einzelnen Zeilen, Zeilenumbruch usw. Damit wird vieles einfacher und vermeidet Fehler.
Außerdem:
ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.
Jürgen
Hallo zusammen,
eigentlich kann ich mich nur voll und ganz juetho anschließen.
Allerdings hatte ich schon ein Codestück vorbereitet:
List<string> result = new List<string>();
foreach (string line in File.ReadAllLines("C:/PfadZurDatei"))
if (line.ToLower().EndsWith(".pdf"))
result.Add(line);
File.WriteAllLines("C:/Zieldatei",result.ToArray());
Gruß,
dN!3L
wow, so viele Antworten in so kurzer Zeit... Danke @ All
zum Codestück:
Sehr elegant... das mit .toLower kannte ich noch garnicht.
Ich werd mich jetzt mehr einlesen in Stringlisten.
Danke nochmal!
Hallo zusammen
Noch kürzer:
var pdfFiles = File.ReadAllLines("C:/PfadZurDatei").Where(l => l.ToLower().EndsWith(".pdf"));
File.WriteAllLines("C:/Zieldatei",pdfFiles.ToArray());
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Wenns schon kurz sein soll kann man sich das ToLower auch noch sparen und stattdessen bei EndsWith das passende StringComparison angeben 😃
Aber der Code soll ja schnell verständlich sein, und wenn man die Syntax mit den Lambda Expressions nicht gewohnt ist, ist wohl dN!3L Code am schnellsten zu verstehen.
Baka wa shinanakya naoranai.
Mein XING Profil.
Hallo talla
Von der Zeichenanzahl wäre es mit der Nutzung von StringComparison jedoch nicht kürzer, aber eleganter, da hast du Recht 😃.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011