Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] Copy and/or edit txt-files

Pagina: 1
Acties:
  • 1.061 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Onlangs ben ik begonnen met C# en wil een simpele tool maken om 2 bestanden (txt) te vergelijken. In eerste instantie wil ik een bepaald gedeelte van de files vergelijken of deze overeenkomen. Het lukt mij echter alleen om de gehele inhoud van de file te vergelijken, terwijl ik slechts een bepaald gedeelte wil vergelijken. Het betreft een gedeelte vanaf het begin van de file totdat een bepaalde string tekst voorkomt, alles wat daarna in de file staat is niet relevant. Nu wilde ik dit oplossen door tmp-files te creeeren en deze te vergelijken, maar ook daar lukt met het niet de txt-file zo aan te passen dat alleen de relevante informatie naar de tmp wordt gekopieerd. Nu kopieert hij de gehele tekst maar ik wil slechts het gedeelte wat voor een bepaalde zin komt. Het probleem is dat de regel variabel is waarop deze zin voorkomt.

Weet iemand een methode waarmee dat wel lukt.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        
private void createTemp(string file)
        {
            FileStream srcFile = new FileStream(file,FileMode.Open,FileAccess.Read);
            StreamReader sr = new StreamReader(srcFile);

            FileStream tempFile = new FileStream(file + ".tmp",FileMode.Create, FileAccess.Write);
            StreamWriter sw = new StreamWriter(tempFile);

            string line = sr.ReadToEnd();
            sw.WriteLine(line);
            
            srcFile.Close();
            srcFile = null;
            tempFile.Flush();
            tempFile.Close();
            tempFile= null;
        }

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je leest bestand 1 naar 'line' en vervolgens schrijf je de volledige variable naar bestand 2. Omdat je de variabele niet hebt gewijzigd, is het toch logisch dat je dan weer hetzelfde wegschrijft naar bestand 2?

Bepaal de locatie waar hetgeen wat je zoek begint ( line.IndexOf() ). Daarna zul je de tekst tot die positie moeten ophalen en opslaan in een andere variable ( line2? ).

Vervolgens kun je line2 naar bestand 2 wegschrijven.


De code om het allemaal voor elkaar te krijgen mag je zelf uitzoeken ;-)

[ Voor 196% gewijzigd door Niemand_Anders op 15-01-2008 13:51 ]

If it isn't broken, fix it until it is..


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

De hele file inladen (kijk ook eens naar de static methodes bij File) en readen tot het punt dat het relevante gedeelte is afgelopen. Dat opslaan in een veriabele, vervolgens de 2e file op dezelfde manier inlezen en dan de 2 variabelen vergelijken :?

Sole survivor of the Chicxulub asteroid impact.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Euh, hoe wijzig je 196% van een bericht?

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
@Niemand_Anders

Ik ben mij er bewust van dat ik nu de inhoud van het bestand in z'n geheel kopieer. Op internet is heel veel te lezen over streamreader/writer maar er is nauwelijks iets te lezen over het bewerken ervan. Mijn probleem ligt dan ook bij het bepalen van de locatie van de string die ik zoek in de file...
Niemand_Anders schreef op dinsdag 15 januari 2008 @ 13:52:
Euh, hoe wijzig je 196% van een bericht?
?

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Verwijderd schreef op dinsdag 15 januari 2008 @ 14:02:
@Niemand_Anders

Ik ben mij er bewust van dat ik nu de inhoud van het bestand in z'n geheel kopieer. Op internet is heel veel te lezen over streamreader/writer maar er is nauwelijks iets te lezen over het bewerken ervan. Mijn probleem ligt dan ook bij het bepalen van de locatie van de string die ik zoek in de file...


[...]


?
Je hele file staat in een string zodra je hem hebt ingelezen, een simpele indexOf kun je dus uitvoeren om te kijken waar je je string moet afhakken

Death smiles at us all, all a man can do is smile back.
PSN


  • WeeJeWel
  • Registratie: April 2007
  • Laatst online: 20-11 11:53
Niemand_Anders schreef op dinsdag 15 januari 2008 @ 13:52:
Euh, hoe wijzig je 196% van een bericht?
eerst heb je 3 tekens, dan 6 andere > 200%

Homey — Critics are those without skills to create.


Verwijderd

Topicstarter
Ik heb het nu zo opgelost, het doet wat het zou moeten doen. Misschien niet de mooiste oplossing, als iemand een mooiere suggestie heeft... hoor ik het graag! Ik ben geen ervaren programmeur, slechts een ingenieur met een hobby.


C#:
1
2
3
4
5
6
7
8
9
10
            StreamReader leesStream = File.OpenText(file);
            StreamWriter schrijfStream = File.CreateText(file + ".tmp");
            
            string txt = leesStream.ReadToEnd();
            int untillLine = txt.IndexOf("QR");
            string txt2 = txt.Remove(untillLine);
            schrijfStream.Write(txt2);
            
            leesStream.Close();
            schrijfStream.Close();

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Verwijderd schreef op dinsdag 15 januari 2008 @ 16:50:
Ik heb het nu zo opgelost, het doet wat het zou moeten doen. Misschien niet de mooiste oplossing, als iemand een mooiere suggestie heeft... hoor ik het graag! Ik ben geen ervaren programmeur, slechts een ingenieur met een hobby.
C#:
1
2
3
4
5
6
7
8
      using(StreamReader leesStream = File.OpenText(file))
      using(StreamWriter schrijfStream = File.CreateText(file + ".tmp"))
      {
            string txt = leesStream.ReadToEnd();
            int untillLine = txt.IndexOf("QR");
            string txt2 = txt.Remove(untillLine);
            schrijfStream.Write(txt2);
      }


Sowieso een goed idee om alles wat IDisposable is (zoals je streams) in een using-block te zetten, dan kan je niet vergeten ze te closen omdat dit automatisch gebeurd.

En misschien niet je complete tekst in 1x inlezen, met name voor het geheugengebruik als je tekstbestanden wat groter worden.

[ Voor 6% gewijzigd door riezebosch op 15-01-2008 17:06 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Topicstarter
Bedankt voor het advies. Ik zal het zeker gebruiken...

Is het mogelijk om streams tot een bepaalde regel in te lezen? Als de bestanden inderdaad groter worden, voldoet de string niet. Zou het mogelijk zijn met streams? Of moet ik dan toch echt gebruik maken van stringbuilder?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 11:14
Je zou per regel in kunnen lezen:
C#:
1
2
3
4
5
6
7
8
9
StreamReader rdr = new StreamReader(file);
List<string> lines = new List<string>();
string line = rdr.ReadLine();
while(line != null)
{
  if(line.Contains("QR");
    break;
  lines.Add(line);
}

Uiteraard zelf even aanpassen om "using" te gebruiken en je StreamWriter per regel laten schrijven.

Roomba E5 te koop


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
waarom hash je je string niet gewoon in het geheugen en vergelijk je de hashes met elkaar.
Hoef je niet allemaal met temp files aan de slag.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • masterpoi
  • Registratie: Oktober 2004
  • Laatst online: 18-11 13:41
Pagina: 1