C# göra multipla txt-filer av textrader

Permalänk
Medlem

C# göra multipla txt-filer av textrader

Jag ska väl börja med att säga att jag är en nybörjare på det här men jag tycker det är kul att programmera.

Till problemet då, jag håller på att göra ett Windows Form som ska kunna göra nya textfiler av alla rader i textfilen. Dessutom vill jag att den ska kunna döpa alla filer efter de första 8 siffrorna/bokstäverna i varje rad.

Jag har kodat en del men jag har en känsla av att jag är helt ute och cyklar.

Vill bara ha lite hjälp på traven om det är nån som är up for the task.

Mvh

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Hedersmedlem

Hur långt har du kommit? Man kan till exempel använda en
System.IO.StreamReader
och dess
ReadLine()
för att läsa en rad i taget från en fil och
System.IO.File.WriteAllText()
för att skapa nya filer.

Permalänk
Medlem

Be programmet läsa in filen (i ditt fall txt filen) helt enkelt

1. Läs in filen
2. Be programmet att för varje rad (foreach) i en medan (while) programmet läser filen
3. Lägg allt i en string lista eller annat för att optimera (beroende på längd)
4. I en annan funktion, säg åt programmet att för varje rad (foreach string s in List)
säg åt den att skapa en fil som heter fileName(i) där i är för varje fil som existerar med det namnet.

Detta kommer utföra delvis det du vill
Om du inte är van vid att arbeta med filer kan du ju läsa denna guide som ska funka. Var noga med privelegier att läsa och skriva bara
lycka till.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk

Total Psedokod (ej testkört, kanske kompilerar, kanske inte)

foreach(string line in File.ReadAllLines(path)) { string fileName = line.Length > 8 ? line.Remove(7) : line; fileName += ".txt"; File.WriteAllText(fileName, line); }

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Tack alla. Ska testa detta. Jag började om på nytt nu för jag krånglade bara till det tror jag.

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Medlem

Såhär har jag gjort. Men jag kan inte få det att funka riktigt.

Det jag vill är mer exakt detta: "button" öppnar "openFD (FileDialog)", man väljer vilken textfil, tar alla rader från filen och gör varje rad till egen fil ,sen "saveFD" för att välja mapp där alla splittade filer ska hamna.

Men hur kan jag göra med "ReadAllLines" grejen? Den blir rödmarkerad.

Jag måste väl ha själva koden för att splitta texterna mellan öppna och spara kommandona?

Citat:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string Chosen_File = "";

openFD.InitialDirectory = "C:";
openFD.Title = "Välj Textfil";
openFD.FileName = "";
openFD.Filter = "Text Files|*.txt";

if (openFD.ShowDialog() != DialogResult.Cancel)
{
Chosen_File = openFD.FileName;

foreach (string line in Chosen_File.ReadAllLines(folderBD))
{
string fileName = line.Length > 8 ? line.Remove(7) : line;
fileName += ".txt";
File.WriteAllText(fileName, line);
}

saveFD.Filter = "txt files (*.txt)|*.txt";

if (saveFD.ShowDialog() == System.Windows.Forms.DialogResult.OK
&& saveFD.FileName.Length > 0)
{

}
}
}

private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{

}

private void saveFD_FileOk(object sender, CancelEventArgs e)
{

}

Jag har säkert gjort allt helt galet, man jag är ivrig att lära mig men detta va lurigt.

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk

Det ska vara:

foreach (string line in File.ReadAllLines(Chosen_File))

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Jaha. Okej. Tackar tackar. Jag lär nog återkomma med mer frågor snart :S

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Skrivet av xenopsy:

Jaha. Okej. Tackar tackar. Jag lär nog återkomma med mer frågor snart :S

Citera gärna för snabbare svar

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Citera gärna för snabbare svar

Okej. Men nu ville inte "File" vara med i "File.ReadAllLines"...

Måste jag göra nån variabel för den?

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Skrivet av xenopsy:

Okej. Men nu ville inte "File" vara med i "File.ReadAllLines"...

Måste jag göra nån variabel för den?

Du måste inkludera namespacet System.IO (högerklicka på det rödunderstrukna, välj "resolve" så ser du)

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Du måste inkludera namespacet System.IO (högerklicka på det rödunderstrukna, välj "resolve" så ser du)

Nu har jag problem med "foreach" istället när jag kör programmet.

private void button1_Click_1(object sender, EventArgs e)
{

if (folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)
//Problem med foreach

foreach (string line in System.IO.File.ReadAllLines(textbox1.Text))
{
string fileName = line.Length > 8 ? line.Remove(7) : line;
fileName += ".txt";
System.IO.File.WriteAllText(fileName, line);
}
}

Som du ser gjorde jag så att textfilen läggs i en richtextbox så att man kan se vad som är i filen. Jag döpte den till textbox1 och matade in den i readalllines. Men det funkar inte... Några ideer?

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Skrivet av xenopsy:

Nu har jag problem med "foreach" istället när jag kör programmet.

private void button1_Click_1(object sender, EventArgs e)
{

if (folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)
//Problem med foreach

foreach (string line in System.IO.File.ReadAllLines(textbox1.Text))
{
string fileName = line.Length > 8 ? line.Remove(7) : line;
fileName += ".txt";
System.IO.File.WriteAllText(fileName, line);
}
}

Som du ser gjorde jag så att textfilen läggs i en richtextbox så att man kan se vad som är i filen. Jag döpte den till textbox1 och matade in den i readalllines. Men det funkar inte... Några ideer?

Du bör nog göra såhär istället:

private void button1_Click_1(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() != DialogResult.Cancel) { textbox1.Text = File.ReadAllText(Chosen_File); foreach (string line in textbox1.Text.Split(Environment.NewLine)) { string fileName = line.Length > 8 ? line.Remove(7) : line; fileName += ".txt"; System.IO.File.WriteAllText(fileName, line); } } }

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Du bör nog göra såhär istället:

private void button1_Click_1(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() != DialogResult.Cancel) { textbox1.Text = File.ReadAllText(Chosen_File); foreach (string line in textbox1.Text.Split(Environment.NewLine)) { string fileName = line.Length > 8 ? line.Remove(7) : line; fileName += ".txt"; System.IO.File.WriteAllText(fileName, line); } } }

Nu har jag fått det att funka, tackar och bugar så mycket för hjälpen.

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Skrivet av xenopsy:

Nu har jag fått det att funka, tackar och bugar så mycket för hjälpen.

Nemas problemas!

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase