Member 13706320 Ответов: 1

Как извлечь содержимое подстроки из текстового файла в консольном приложении


формат моего входного текстового файла

SHIPPER/EXPORTER (2)                                        DOCUMENT NO (5)
EXXON MOBIL CORPORATION                                  NAM2998573      NAM2998573                       
22777 SPRINGWOODS VILLAGE PARKWAY                        EXPORT REFERENCES (6)
SPRING, TX 77389-1425 USA                                5004753 / 6004754
                                                           4451690406

 CONSIGNEE (3)                                       FORWARDING AGENT - REFERENCES (7)
MANULI DA AMAZONIA                                E LOGISTICS INC (931839)
INDUSTRIA DE EMBALAGENS LTDA AV.                 3050 POST OAK BLVD, STE 444   CHB:
BURITI 3670 BAIRRO DISTRITO                           HOUSTON, TX 77056    FMC: 025823        
INDUSTRIAL 69075-000 MANAUS, AM                   TEL. NO. 346-802-4008
BRASIL
 CNPJ/CPF: 14269557000137

NOTIFY (4)                                        POINT AND COUNTRY OF ORIGIN (8)
MANULI DA AMAZONIA
INDUSTRIA DE EMBALAGENS LTDA AV.                    UNITED STATES
BURITI 3670 BAIRRO DISTRITO                DOMESTIC ROUTING/EXPORT INSTRUCTIONS (9)
INDUSTRIAL 69075-000 MANAUS, A              NO SED REQUIRED - X20180206869589
BRASIL CNPJ: 14.269.557/0001-37




Примечание: Я хочу прочитать и извлечь первые значения подстрок грузоотправителя/экспортера.

в моем программном коде, когда я читаю грузоотправитель экспортер значения его чтение документа нет и экспорт справочных значений также.
так вот, когда я читаю грузоотправителя-экспортера имя заголовка и значения я хочу, чтобы пропустить документ и экспортировать ссылка заголовок имя и значения

поэтому, пожалуйста, любезно дайте мне решение для этого

я хочу показать свой вывод как в этом формате

ГРУЗООТПРАВИТЕЛЬ/ЭКСПОРТЕР (2)
КОРПОРАЦИЯ "ЭКСОН МОБИЛ"
22777 СПРИНГВУДС ВИЛЛИДЖ ПАРКУЭЙ
ВЕСНА, ТЕХАС 77389-1425 США

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

<pre>
static void Main(string[] args)
{
текст строки = System.IO.File.ReadAllText(@"D:\data.txt");
int i = text.IndexOf("грузоотправитель/Экзоптер");
строка shipperexpoter = text.Substring(i+15,80);
System.IO.File.WriteAllText(@"D:\output.txt", "Shipper/Exopter="+shipperexpoter);
Приставка.WriteLine("Shipper/Expoter =" +shipperexpoter);
Приставка.Прочитай();

BillWoodruff

Вам нужно иметь некоторую регулярную структуру в данных, чтобы четко разграничить объекты и атрибуты, или использовать ИИ.

Member 13706320

как же так? можете ли вы дать дать шаги?

Member 13706320

невозможно получить значения подстрок, потому что во входном текстовом файле
Заголовок имя грузоотправителя/экспортера (2) в той же строке другое имя документ нет после следующей строки подстрочные значения грузоотправителя/экспортера в той же строке подстрока документа нет после так как же можно получить значение подстроки

1 Ответов

Рейтинг:
1

OriginalGriff

Вам нужно начать с более пристального изучения вашего текстового файла и выяснить, что отличает материал слева от материала справа. Если это всегда пробелы, а правая часть всегда начинается в одном столбце, то это просто задание подстроки, похожее на ту строку, которую вы показываете. Если это не так, то он становится более сложным, и вам нужно решить, как правильно его идентифицировать. Не просто предполагайте, что "он всегда начинается в столбце 40", потому что он показывает это в вашем текстовом редакторе - он может использовать вкладки, чтобы "переместить его поперек", и если это так, то подстрока не будет работать правильно.

Затем перестаньте читать текст в строке и считывайте его как строки:

string[] lines = File.ReadAllLines(@"D:\data.txt");
Затем используйте цикл для изучения каждой строки, пока не найдете одну, начинающуюся с "грузоотправитель/экспортер"
Затем вы можете обработать следующие строки, чтобы извлечь информацию об адресе, прежде чем продолжить просмотр, есть ли там еще экспортеры.


Member 13706320

Нет, на 1 странице нет грузоотправителя/экспортера. не могли бы вы дать мне краткую программу для этого, я могу попробовать, так что, пожалуйста, сделайте все необходимое.

OriginalGriff

Нет, это ваше домашнее задание - мы готовы помочь вам, но не делаем все это за вас!

Member 13706320

В любом случае, спасибо за ваши комментарии, я не хочу использовать int i для string.substring, чтобы разделить значения i, я прав.
я должен использовать условие цикла там прямо сейчас.

OriginalGriff

Не глядя на ваши фактические данные, я не могу сказать, но вам, вероятно, нужно и то, и другое: цикл для разделения нескольких строк и подстрок внутри этого цикла.

Member 13706320

каков способ показать вам мой файл так что пожалуйста помогите мне в этом я должен закончить эту работу как можно скорее

OriginalGriff

Какую часть фразы "Это твоя домашняя работа" ты не понял? :смеяться:
Начните с того, что внимательно посмотрите на него сами и посмотрите, сможете ли вы что-нибудь узнать.

И никогда не подчеркивайте срочность вашего домашнего задания: все хотят получить ответ быстро, а подчеркивая ваш, просто говорят: "у меня плохое управление временем, и я хочу, чтобы вы сделали это для меня до того, как он придет", - и это замедлит ответ, а не ускорит его.

Member 13706320

я все еще пытаюсь найти решение для этого я никогда не сдаюсь

OriginalGriff

Хорошо! :большой палец вверх:

Member 13706320

можете ли вы разместить здесь любую связанную ссылку на пример программы, по которой я могу проанализировать программу и сделать это сам..

OriginalGriff

Перестаньте искать того, кто сделает это за вас: вы ничему не научитесь должным образом, если не сделаете это сами.
Домашнее задание курса развития предназначено для того, чтобы заставить ваш мозг работать "по-разному", думая о проблемах и решениях, а не просто гуглить в поисках результата. Если вы не научитесь думать таким образом, вы никогда не будете хороши в этом деле, Честное слово.

Это не сложно - несколько минут тщательного обдумывания привели бы вас на 90% туда еще несколько часов назад!

Member 13706320

Спасибо за то, что вы меня ободряете ... я попробую это сделать

OriginalGriff

Это все, о чем мы просим!

Member 13706320

мне нужно уточнить с вами шаблон регулярных выражений для этой работы?

OriginalGriff

Даже не думайте о регулярном выражении для этого: не зная, что именно находится в файле, вы потратите много времени, пытаясь заставить его работать-и тогда он потерпит неудачу на вашем втором примере!

Member 13706320

хорошо, сэр, я все еще ищу решение

Member 13706320

Спокойной Ночи!

Member 13706320

невозможно получить значения подстрок, потому что во входном текстовом файле
Заголовок имя грузоотправителя/экспортера (2) в той же строке другое имя документ нет после следующей строки подстрочные значения грузоотправителя/экспортера в той же строке подстрока документа нет после так как же можно получить значение подстроки

OriginalGriff

Подумайте об этом. Что делает подстрока?
Как бы вы сделали это вручную?

Member 13707832

Чтобы найти одно значение подстроки мне нужно объявить три переменные

OriginalGriff

Какие именно? И что вы с ними делаете?

Member 13707832

Иам с использованием
Int I = текстовый индекс (“ shipperexporter”)
Int j = текстовый индекс ( “ shipperexporter(2) “) ;
Тогда только РАБОЧИЕ значения подстрок

OriginalGriff

Хорошо - давайте предположим, что это все промежутки между вещами.
Найдите первую строку: она начинается с "грузоотправитель/экспортер".
В этой строке найдите индекс "документа" и сохраните его.
В последующих строках извлеките подстроки между началом строки (индекс 0) и индексом "документа", который вы сохранили, минус 1.
Используйте Trim, чтобы удалить начальные и конечные пробелы.
Что у тебя осталось?

Member 13707832

Можете ли вы дать краткий программный код

OriginalGriff

Я отсылаю вас к началу нашего разговора:

Какую часть фразы "Это твоя домашняя работа" ты не понял? :смеяться:

Да ладно, это довольно тривиальная вещь!

Member 13707832

Я пытаюсь, но все еще на моем исходном коде

OriginalGriff

У вас там есть полная инструкция!
Это что - всего десять строк кода? Может быть, меньше?
Я дам тебе подсказку:

            string[] lines = File.ReadAllLines(@"D:\Temp\TestData.txt");
            bool searching = true;
            int end = -1;
            foreach (string line in lines)
                {
                if (searching)
                    {
Just 3 lines of code are needed here!
                    }
                Console.WriteLine(line.Substring(0, end).Trim());
                }
Объясните, что все это делает правильно на английском языке, и я дам вам еще одну строку кода! Договорились?

Member 13706320

str="грузоотправитель/экспортер"
INT I=0; I<length;I++

OriginalGriff

Нет. Давай - думай!
Первый-это утверждение "если". Как вы думаете, что он хочет проверить на thi9nk?

Member 13706320

документ № и значения

OriginalGriff

Так что пиши код ... ну же, я знаю, что ты умный, просто подумай.

Member 13706320

документа нет и экспортера эталонное значение я - Космос

Member 13706320

пожалуйста, предоставьте мне код

OriginalGriff

ОК. Первая строка из недостающих трех:

если (!линия.StartsWith("грузоотправитель/экспортер")) продолжить;

Вы не получите следующий в течение 24 часов, если не объясните, что делает весь код до сих пор. Когда вы должны сдать это дело?

Member 13706320

в следующей строке мне нужно рассчитать пространство от грузоотправителя/экспортера документ и справочник экспортеров

Member 13706320

Доброе Утро!

Member 13706320

1.я должен прочитать стоимость грузоотправителя/экспортера
2.я должен прочитать документ нет
3. я должен прочитать ссылку экспортера
4. я должен прочитать грузополучателя
5. я должен прочитать уведомление
6. у меня есть порт dishcarge
7. у меня есть порт загрузки и т. д.... Например, 15 или 20 имен заголовков, которые я хочу найти и прочитать из значений подстрок.
Входной файл put выглядит в том же формате, что и данные, которые я здесь не использовал

Member 13706320

Доброе Утро! Сэр

OriginalGriff

Доброе утро! Вы уже закончили его?

Member 13706320

нет, сэр, сделайте необходимое

OriginalGriff

Нет. Вы получаете еще одну линию примерно через 5 часов.

Member 13706320

я работаю на прогулке все еще не получаю должного пути
в моем кодировании он работает но не получает правильного выравнивания вот в чем проблема

Member 13706320

for (int i = lines.Count - 1; i >= 0; i--)

Member 13706320

эта концепция была правильной ?

OriginalGriff

Цикл for?
Нет.

Member 13706320

Хорошо, сэр, мне нужна ваша помощь в этом деле
Какой двигатель ОРЗ поможет извлечь из PDF в текст и извлекать для получения значений подстроки

OriginalGriff

зачем вам понадобилось распознавать PDF-файл? Вы преобразуете его в изображение?

Member 13706320

Я хочу, чтобы преобразовать в распознавания текста PDF в текст
После преобразования я хочу извлечь значение подстроки в OCR ENGINE его очень легко и просто я прав.

OriginalGriff

Распознавание никогда не бывает простым: а PDF - файл обычно состоит из текста-поэтому чтение PDF-файла как PDF-файла означает, что вы получаете доступ непосредственно к тексту без осложнений и ошибок, которые вводит распознавание текста.

Google для "PDF reader c#", и вы найдете множество способов сделать это.

Member 13706320

это платно или бесплатно ?сэр

OriginalGriff

По крайней мере, два из них должны быть здесь, так что они будут свободны. Существует также iTextSharp (free), который я использовал когда-то давным-давно (но не могу вспомнить sod - все об этом, я использую платный автономный продукт - Corel PDF Fusion-в тех редких случаях, когда мне приходится играть с PDF-файлами в наши дни.)

Member 13706320

хорошо, я проверю Corel PDF FUSION, могу ли я получить программный код.

OriginalGriff

Нет - это автономный продукт для просмотра и редактирования PDF-файлов, вы не можете получить исходный код. Я упомянул об этом, чтобы объяснить, почему я больше не использую iTextSharp - который является бесплатным и работает IIRC.

Member 13706320

хорошо , сэр, но не могли бы вы дать решение для этой подстроки экстракта

OriginalGriff

Следующая линия:
поиск = ложь;

Еще одна строка: 24 часа.

Member 13706320

string[] lines = файл.ReadAllLines(@"D:\Temp\TestData.txt");
булев поиск = истина;
инт конец = -1;
(строки по каждому элементу в линии)
{
если (поиск)
{
//Здесь нужно всего 3 строки кода!
если (!линия.StartsWith("грузоотправитель/экспортер")) продолжить;
Следующая строка:поиск = false;

}
Приставка.WriteLine(строка.Подстрока(0, конец).Отделка());
}

OriginalGriff

Все, что вам нужно сделать, это поставить их в нужное место! (то есть - смотреть, куда идут фигурные скобки)

Member 13706320

Доброе утро сэр

Member 13706320

Сэр пожалуйста добросердечно дайте мне код

OriginalGriff

Она у тебя уже есть!
Вы сами вчера написали последнюю строчку - это произвело на меня впечатление. Все, что вам нужно было сделать, это поставить их в нужное место.
<pre lang="cs> string[] lines = File.ReadAllLines(@"D:\Temp\TestData.txt");
булев поиск = истина;
инт конец = -1;
(строки по каждому элементу в линии)
{
если (поиск)
{
если (!линия.StartsWith("грузоотправитель/экспортер")) продолжить;
поиск = ложь;
конец = строка.IndexOf("документ№") - 1;
}
Приставка.WriteLine(строка.Подстрока(0, конец).Отделка());
}

Member 13706320

Спасибо, когда я запускаю эту программу, я не получаю вывод, я получаю пустой экран в консольном приложении

OriginalGriff

Тогда ваш файл данных не содержит того, что вы нам показываете - на что я сказал вам посмотреть очень внимательно в самом начале!

Member 13706320

когда я использую точку останова в могу видеть данные в то время но после того как в консольном приложении данные были пусты не получая вывода

OriginalGriff

Проверьте файл: он находится в том же самом месте?
Если это так, убедитесь, что версия вашего приложения, которое вы запускаете в консоли, совпадает с той, которую вы отлаживали - "релизные" версии не создаются автоматически при создании решения, вы должны специально создавать их.
Если он работает в отладчике, он должен работать в "производстве".

Member 13706320

сэр, могу ли я поделиться своей почтой здесь ping to my mail я поделюсь с вами своим текстовым файлом

OriginalGriff

Нет. Я уже получаю несколько сотен писем в день, и мне не нужно больше. :смеяться:
Поместите его в dropbox, и я посмотрю, есть ли у меня время, чтобы посмотреть на него.

Member 13706320

Сэр, не могли бы вы еще раз опубликовать весь программный код PLS? я могу попробовать это на моем c#

OriginalGriff

Он все еще там с 18 часов назад - просто посмотрите выше этого сообщения!

Member 13706320

я использую версию 4.5.1 C#

Member 13706320

Сэр, если я хочу опубликовать полный текст, в каком формате я должен это сделать..

OriginalGriff

Поместите файл в dropbox, так он вообще не будет "изменен".

Member 13706320

в таком формате будет выглядеть мой текстовый файл

Member 13706320

потому что я новичок в этом, если я копирую и мимо текстового файла вы можете увидеть точность?

Member 13706320

поэтому, пожалуйста, пришлите мне полный исходный код

Member 13706320

Доброе утро! я жду.

OriginalGriff

За что же?
Вчера у тебя был код!

Member 13706320

я пробую этот код на visual studio, он не работает, и я получаю пустой экран консольного приложения. поэтому, пожалуйста, пришлите полный код сюда, я могу попробовать его..

OriginalGriff

У вас есть код, который я использовал.
Либо ваши данные не похожи на образец, который вы дали - и я сказал вам внимательно посмотреть на это несколько дней назад - или вы не используете его правильно.

Используйте отладчик и посмотрите, что именно происходит во время выполнения кода.

Member 13706320

пожалуйста помогите мне с концепцией петли сэр

OriginalGriff

Если вы не собираетесь слушать то, что мы говорим, тогда нет никакого смысла в этой дискуссии.

Пожалуйста, вернитесь, когда вы будете готовы использовать отладчик и посмотрите на проблему должным образом. А до тех пор я больше ничего не могу сделать, так что всего хорошего.

Member 13706320

сэр не могли бы вы посмотреть мой текстовый формат который я только что обновил здесь

Member 13706320

когда я использую точку останова, она не читается до конца цикла.

OriginalGriff

А почему бы и нет? Что управляет циклом, и что находится в соответствующих переменных?

Member 13706320

я дал здесь петлю
если(поиск)
{
если (!линия.StartsWith("грузоотправитель/экспортер")) продолжить;
}

OriginalGriff

Это не петля.
Это часть того, что находится внутри петли.
И что, по словам отладчика, находится в переменных?

Member 13706320

я пытаюсь, но не работаю здесь

Member 13707832

Он не движется от следующей строки

OriginalGriff

- А что, по словам отладчика, находится в переменных?"
Вы уже посмотрели?

Member 13706320

Привет, сэр, Доброе утро!

Maciej Los

Можете ли вы вставить содержимое текстового файла в https://pastebin.com/? Затем разместите ссылку на него.

Member 13706320

https://pastebin.com/cHbyysNW

Maciej Los

Не размещайте спам!

Member 13706320

собственно как же тогда получить это от

OriginalGriff

Вы смотрели файл, который загрузили?
Пойди и посмотри ... внешность. Затем посмотрите на пример, с которого вы начали ... А потом скажите мне, где они вообще похожи.

Member 13706320

string[] lines = файл.ReadAllLines(@"E:\Exxon BL\Exxon BL\CMA\64C90E9451B70676E0530A0087616E94.txt");
булев поиск = истина;
инт конец = -1;
(строки по каждому элементу в линии)
{
если (поиск)
{
если (!линия.StartsWith("грузоотправитель/экспортер")) продолжить;
поиск = ложь;
конец = строка.IndexOf("документ№") - 1;
}
Приставка.WriteLine(строка.Подстрока(0, конец).Отделка());
Приставка.Прочитай();
}

OriginalGriff

Хватит валять дурака.
Файл, который вы загрузили, абсолютно не похож на приведенный вами пример, поэтому, если это действительно то, что вы обрабатываете, то нет никакого способа на Земле, чтобы вы могли разобрать его и извлечь информацию, которую вы ищете, потому что ее там вообще нет.

Нет, идите и загрузите файл, на который вы разместили ссылку, откройте его в блокноте и посмотрите на содержимое. Это то, что вы хотели опубликовать? Это то, что вы обрабатываете?

OriginalGriff

И как это должно выглядеть в сравнении с тем примером, который вы привели для начала? Вы вообще на него смотрели?

Member 13706320

когда я использую точку останова, она не переходит к следующей строке...

Member 13706320

в этом пути у меня есть мой входной текстовый файл..

OriginalGriff

Вниз.
Загрузка.
То.
Файл.

Смотреть на это.

Думать.

Member 13706320

если вы не мой, могу ли я поделиться своим идентификатором здесь, вы отправите тестовую почту на почту, я перешлю свой текстовый файл, пожалуйста, помогите мне в этом.

OriginalGriff

Нет.
Вы уже разместили его на pastebin, так что же заставляет вас думать, что отправка его мне по электронной почте изменит его?
Вы потрудились взглянуть на файл, который загрузили?

Member 13706320

Сэр, здесь я не публиковал полное выравнивание файлов, так что y я публикую здесь небольшой образец

OriginalGriff

Я просто уйду, потому что если я этого не сделаю, то начну ругаться на тебя, и это никому не поможет.

Member 13707832

Хорошо сэр