Tekstbestanden splitsen

(English below.)

Ik was op zoek naar een programmaatje dat txt-bestanden kan splitsen op gewenste plekken. Het volgende moet bijvoorbeeld worden gesplitst bij het woord CHECKPOINT:

-84.27,86.14,429.25,11350.17
-84.27,86.14,429.25,11350.19
CHECKPOINT
CHECKPOINT
-84.27,86.29,429.22,11350.20
-84.47,86.22,428.85,11350.22
CHECKPOINT
CHECKPOINT
-84.47,86.22,428.85,11350.23
...

en zal 3 bestanden moeten opleveren met de verschillende getallenreeksen en niet de woorden CHECKPOINT.

Bij mijn zoektocht vond ik echter alleen maar programma’s die tekstbestanden op grootte kunnen splitsen, dus heb ik zelf een programmaatje bedacht. Voor iedereen die hetzelfde zoekt maar niet kan vinden, hier een mogelijke oplossing (eerst in pseudocode):

% variabelen initialiseren:
NUMMER=1 % regelnummer
XX=0 % achtervoegsel voor nieuwe bestanden, bv. bestand1.txt

while(NUMMER < length(bron.txt)) % zolang er regels zijn if(length(regel(NUMMER)) < 11) % als de huidige regel korter is dan 11 tekens (bv. het woord 'checkpoint') check=1 % deze variabele geeft aan dat je bij een checkpoint bent else % als de regel langer is dan 10 tekens if(check=1) % en de vorige regel was een checkpoint en de huidige niet XX++ % bestandsnummer ophogen check=0 % je bent niet bij een checkpoint end ... % voeg nu de huidige regel toe aan bronXX.txt (als nieuwe regel zonder anderen te overschrijven. XX is een getal in de bestandsnaam) end NUMMER++ % ga naar volgende regel end

In C-sharp (C#) ziet dit programma er als volgt uit (alleen nog even wijzigen dat hij vraagt om de bestandsnaam, in plaats van om standaard output.txt te gebruiken):

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
bool isNewFile = true;
bool isFileClosed = true;
int fileNum = 0;
string outputFileName = String.Concat("C:\\output", fileNum, ".txt");
StreamWriter SW = null; // new StreamWriter(outputFileName);
string w;
string line = "";
using (StreamReader sr = new StreamReader("C:\\output.txt")) {
while ((line = sr.ReadLine()) != null) {
w = line.Substring(0,10);// (sentence, @"\W");
if (w != "CHECKPOINT") {
if (isNewFile) {
outputFileName = String.Concat("C:\\output", fileNum, ".txt");
fileNum++;
SW = new StreamWriter(outputFileName);
isNewFile = false;
isFileClosed = false;
}
SW.WriteLine(line);
} else {
isNewFile = true;
if (!isFileClosed) {
SW.Close();
isFileClosed = true;
}
}
}
}
}
}
}

(Om C# uit te kunnen voeren, heb je Visual Studio nodig.)

For English readers
I was looking for a program that is able to split up txt-files at given lines (e.g. lines that start with CHECKPOINT or lines that have less than say 11 characters). The only programs I could find where programs that could split txt files by filesize, so I thought of this new program in pseudocode:

% variables:
NUMBER=1 % line number
XX=0 % new files get this number, e.g. file1.txt

while(NUMBER < length(source.txt)) if(length(line(NUMBER)) < 11) check=1 else if(check=1) % the previous line was short and the current line is not XX++ check=0 end add a new line to sourceXX.txt (new line without overwriting others. XX is again a number) end NUMBER++ % go to next line

This code is translated in C# above.

  • J.Boender

    misschien kunt u mij met het volgende helpen. heb getracht via compaq een opstart probleem op te lossen. na de nodige handelingen is veel verdwenen. zoals increditmail met afbeeldingen e.d. en spotify. heeft u een idee hoe ik die belangrijke zaken terug kan halen.

  • Dat ligt eraan wat er gedaan is. Als Compaq als oplossing een recovery heeft gedaan waarbij Windows min of meer opnieuw is geïnstalleerd, zijn deze bestanden mogelijk weg en moeten ze er opnieuw opgezet worden. Voor andere dingen (zoals Spotify) zal het opnieuw installeren van en inloggen bij dat programma de bewaarde lijsten e.d. terugbrengen.

    Ga eens via Deze Computer naar de C:-schijf en zoek naar de map Gebruikers, Users of Documents and Settings. Wellicht staan daar de kwijtgeraakte bestanden nog?

%d bloggers liken dit: