Reden Rodriguez Ответов: 2

Как вставить в строку столько раз, сколько я хочу, а затем вызвать ее?


Привет, сначала мой вопрос выше моего звука глупый в любом случае я создаю простое приложение, которое может создавать текстовый файл. То что я делаю это то что я вставляю кучу слов в одну строку используя конкатенацию а затем вызываю in
File.Write(File);
.

моя проблема заключается в том, как я могу повторить процесс вставки слов в строку снова и снова, а затем вызвать ее в файл.Write();, потому что я не хочу создавать тысячу текстовых файлов. вот мой код.


string space = "\r\n";
    string UNB = "UNB+UNOA:2+MNL03+WANHAI+20200413:0000+11011" + "'" + space;
    string UNH = "UNH+11011+CODECO:D:95B:UN:ITG13" + "'" + space;
    string BGM = "BGM+34+20200413+9" + "'" + space;
    string NAD = "NAD+CF+WHL:160:166" + "'" + space;
    string EQD = "EQD+CN+WHLU0327099+22GI:102:5+++4" + "'" + space;
    string DTM = "DTM+" + dtmDO.dtQualifier + ":" + dtmDO.dtPeriod + ":" + dtmDO.dtPeriodFormatQualifier + "'" + space;
    string LOC = "LOC+11+PHBTG:139:6" + "'" + space;
    string CNT = "CNT+16:1" + "'" + space;
    string UNT = "UNT+10+11011" + "'" + space;
    string UNZ = "UNZ+4+11011" + "'" + space;

    string final = UNB + UNH + BGM + NAD + EQD + DTM + LOC + CNT + UNT + UNZ;
    StreamWriter File = new StreamWriter("Reden.edi");
    File.Write(File);
    File.Close();


Что я уже пробовал:

я попробовал вставить метод в строку, но нет, это не то, что я хочу, но я это попробую добавить метод, но я не делаю никакого следующего шага.


Привет, вот мое решение по использованию
File.AppendAllText
метод


DTM dtmDO = new DTM();
            string space = "\r\n";
            int r = 100;
            StreamWriter Files = new StreamWriter("Reden.edi");
            Files.Close();
            string UNB = "UNB+UNOA:2+MNL03+WANHAI+20200413:0000+11011" + "'" + space;
            string UNH = "UNH+11011+CODECO:D:95B:UN:ITG13" + "'" + space;
            string BGM = "BGM+34+20200413+9" + "'" + space;
            string start = UNB + UNH + BGM;
            File.AppendAllText("Reden.edi", start);
            for (int i = 0; i < r; i++)
            {         
                string NAD = "NAD+CF+WHL:160:166" + "'" + space;
                string EQD = "EQD+CN+WHLU0327099+22GI:102:5+++4" + "'" + space;
                string DTM = "DTM+" + dtmDO.dtQualifier + ":" + dtmDO.dtPeriod + ":" + dtmDO.dtPeriodFormatQualifier + "'" + space;
                string LOC = "LOC+11+PHBTG:139:6" + "'" + space;
                string final = NAD + EQD + DTM + LOC;
                File.AppendAllText("Reden.edi", final);
            }     
            string CNT = "CNT+16:100" + "'" + space;
            string UNT = "UNT+10+11011" + "'" + space;
            string UNZ = "UNZ+4+11011" + "'" + space;
            string end = CNT + UNT + UNZ;
            File.AppendAllText("Reden.edi", end);         
            Files.Close();


И это работает благодаря всем. :)

2 Ответов

Рейтинг:
16

CPallini

Если я поймаю тебя, то ты сможешь найти то, что нужно. Класс StringBuilder (System.Text) | Microsoft Docs[^] интересный.


Maciej Los

5ed!

CPallini

Спасибо вам снова и снова (и снова) :-)

Рейтинг:
12

OriginalGriff

Две вещи:
1) код, который вы показываете, записывает неизвестную строку в файл: вы собираете строку в final но напишите содержание sb:

string final = UNB + UNH + BGM + NAD + EQD + DTM + LOC + CNT + UNT + UNZ;
...
File.Write(sb);


2) Есть несколько способов сделать то, что вы хотите. Один из них - как предложил CPallini - заключается в использовании StringBuilder, что всегда лучше, чем конкатенация строк. StringBuilder-это "расширяемая строка", которая означает, что она использует меньше памяти, чем несколько конкатенаций (помните, что строки неизменяемы, поэтому каждый раз, когда вы добавляете две строки, вы создаете третью.
Настоящий кодекс:
string final = UNB + UNH + BGM + NAD + EQD + DTM + LOC + CNT + UNT + UNZ;
генерирует ряд промежуточных строк, каждая из которых увеличивается в длину по мере прохождения.

Лучшим решением может быть просто использовать Файл.Метод AppendAllText (System.IO) | Microsoft Docs[^] чтобы добавить каждый термин, когда вам нужно:
string final = UNB + UNH + BGM + NAD + EQD + DTM + LOC + CNT + UNT + UNZ;
...
File.AppendAllText("Reden.edi", final);


Reden Rodriguez

string builder хорош, но он выбросит исключение OutOfMemoryException я думаю, что лучшее решение-это снова открыть файл и написать на нем. Спасибо товарищам за понимание моего вопроса.

OriginalGriff

Если ваш StringBuilder выбрасывает "из памяти", то с кодом что - то очень не так-он может использовать до 4 ГБ пространства!

Насколько велик ваш лог-файл? :OMG:

Maciej Los

5ed!