WinFuture-Forum.de: Nach bestimmten Wert zählen und Zeichen setzen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Nach bestimmten Wert zählen und Zeichen setzen


#1 Mitglied ist offline   Gembolum 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 23. Januar 16
  • Reputation: 0

geschrieben 23. Januar 2016 - 13:28

Hallo zusammen,

bin noch ein Neuling in programmieren und bräuchte mal Hilfe.

Ich lese eine TXT Datei ein und muss sie formatieren und speichere sie neu ab, so das ich sie nachher DataGridView einlesen kann.

z.B. 1234abcdefg678aa

Über
sb = sb.Insert(4, ",");
setze ich das erste Komma.
Wenn ich den befehl wiederhole fängt er wieder von vorne an zu zählen.

Wie kann ich es so machen, dass ab dem gesetzten Komma wieder gezählt wird?


Noch eine kleine Frage
Kann ich das ganze auch ohne das zusätliche speichern in eine neue TXT an DataGridView übergeben?

Mein Code
        private void btn_test_Click(object sender, EventArgs e)
        {
            List<string[]> parsedData = ReadAndtParseData(txt_quelle.Text, ',');


            using (var sw = new StreamWriter(txt_newFile.Text))
            {
                foreach (string[] row in parsedData)
                {
                    var sb = new StringBuilder();
                    foreach (string s in row)
                    {
                        sb.Append(s + ",");
                    }

                    sb.Remove(sb.Length - 1, 1); 
                    sb = sb.Insert(3, ",");
                    sb = sb.Insert(4, ",");
                    sw.WriteLine(sb.ToString().Trim(new Char[] { ';' }));

                }
            }

            List<string[]> parsedDataNew = ReadAndtParseData(txt_newFile.Text, ',');
            DrawDataGridView(parsedDataNew);


0

Anzeige



#2 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 23. Januar 2016 - 20:57

Hallo, was hast du denn genau vor?

In deiner Text-Datei steht also "1234abcdefg678aa" und du willst diesen in einem DataGrid anzeigen.
Wie soll es es denn genau formatiert werden bzw. was/wie soll der Text angezeigt werden?

Ich bin mir leider nicht sicher was du genau meinst.
Warum willst du Kommas setzen?
Es ist leider unklar was deine Funktion "ReadAndtParseData" genau macht, willst du eine CSV Datei lesen und anzeigen?


Zum zweiten, du hast deinen Wert bereits im Speicher und brauchst diesen daher nicht wieder in eine Datei schreiben und erneut lesen.
0

#3 Mitglied ist offline   Gembolum 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 23. Januar 16
  • Reputation: 0

geschrieben 23. Januar 2016 - 23:08

Hallo,

ich lese eine TXT ein, die keine passende Trennung fürs einlesen in DataGrid hat.
Aus diesem Grund mache alles unnötige Zeichen aus der row.

Jetzt komme ich zum punkt, wo ich eine passende Trennung (,) für DataGrid setze.

sb = sb.Insert(4, ","); //Spalte1
sb = sb.Insert(7, ","); //Spalte2
sb = sb.Insert(3, ","); //Spalte3

Das Programm zählt immer von Anfang des String.
Ich möchte, das er beim zweiten Insert ab dem vorigen Insert zählt.

(Könnte jetzt sagen, das ich immer von Anfang zähle (Insert1=4 / Insert2 = 11 / Insert3 = 14).
Hätte dann mein gewünschtes ziel, finde ich aber nicht schön und will es wenn möglich nicht)

Text im File:
1234abcdefg________678aa7755___9999
Text nach einlesen:
1234abcdefg678aa77559999
Text nach Insert:
123,4,ab,cdefg678aa77559999
Text soll Insert:
1234,abcdefg,678,aa77559999
0

#4 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 24. Januar 2016 - 00:29

Oh, auch noch ungleichmäßige Anzahl von Zeichen?
Ich würde das mit Regexen machen. Also immer im Übergang von [a-z] zu [0-9] trennen und andersrum.
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#5 Mitglied ist offline   Gembolum 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 23. Januar 16
  • Reputation: 0

geschrieben 24. Januar 2016 - 00:40

Es können auch Buchstaben und zahlen zusammen gehören.
Es sind immer feste Breiten.

Dieser Beitrag wurde von Gembolum bearbeitet: 24. Januar 2016 - 00:41

0

#6 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 24. Januar 2016 - 00:56

Insert ist immer vom Anfang aus, du kannst aber selber mitzählen wieviele Zeichen du bereits bearbeitet hast und addierst diese dann einfach dazu.

Noch besser ist es auf Insert zu verzichten und einfach den Text den du brauchst zu holen.
Wenn du das ganze in eine Helfer-Methode packst braucht man nicht viel mehr tun.

Hier mal ein Beispiel
class Program
{
    static void Main(string[] args)
    {
        var text = "1234abcdefg678aa77559999";

        var textSplit = SplitStringAtPosition(text, 4, 7, 3);

        Console.WriteLine(textSplit);
        Console.ReadKey();
    }

    private static string SplitStringAtPosition(string s, params int[] positions)
    {
        // temporäre Liste für das Ergebnis
        var temp = new List<string>();
        
        // mitzählen wieviele Zeichen bereits gelesen
        var startIndex = 0;

        // durch alle Trennstellen schleifen
        foreach (var position in positions)
        {
            // wenn der Text zu kurz ist, abbrechen
            if((startIndex + position) >= s.Length)
                break;

            // text abschneiden und in die Liste speichern
            temp.Add(s.Substring(startIndex, position));

            // gelesene Zeichen mitzählen
            startIndex += position;
        }

        // falls noch Text übrig bleibt, hinzufügen
        if(startIndex < s.Length)
            temp.Add(s.Substring(startIndex));

        // als Text mit , getrennt zurückgeben
        return string.Join(",", temp);
    }
}

0

#7 Mitglied ist offline   Gembolum 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 23. Januar 16
  • Reputation: 0

geschrieben 24. Januar 2016 - 17:14

Danke aeris.

Habe jetzt auf insert verzichtet und mache es wie du es empfohlen hast.
Jetzt ist es eine saubere Sache.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0